2010-07-23 4 views

Répondre

4

L'expression régulière que vous utilisez ne permet pas les lettres; c'est le contraire de ce que vous êtes rapporté dans le titre.

/[a-z]/i suffit, si vous voulez n'accepter que des lettres. Si vous voulez autoriser des lettres comme à, è ou ç, alors vous devriez développer l'expression régulière; /[\p{L}]/ui devrait fonctionner avec toutes les lettres Unicode.

1

/[^ A-Za-z] */correspond à tout sauf aux lettres. Vous ne devriez pas avoir besoin de spécifier de chiffres ou de ponctuation.

+0

Bien que ce que vous avez dit soit vrai, il ne répond pas à la question. Voir la réponse de Kiamlaluno. –

+0

En fait, pour ce que je fais kurrel est juste. mais c'est une erreur dans la façon dont j'ai posé la question et dans l'exécution de mon propre code. - 2 pour moi, mes excuses. Mon regex original fonctionne réellement au besoin. – atwellpub

+0

La seconde version de kiamlaluno est plus flexible en ce qui concerne les caractères supplémentaires, mais si vous utilisez la regex dans une instruction if pour correspondre à ce que vous ne voulez pas, vous allez chercher des négatifs au lieu de positifs . – kurreltheraven

0

À l'intérieur d'une classe de caractères, le signe^ne signifie pas. Donc, vous cherchez pas une lettre. Vous voulez quelque chose comme

[A-Za-z]+ 
0

vous pouvez également utiliser le raccourci \w pour un « caractère de mot » (alphanumérique, plus _). Bien sûr, certains moteurs de regex peuvent différer sur le support pour cela, mais si c'est PCRE cela devrait fonctionner. See here (sous la rubrique "séquences d'échappement").

2
#^[^a-z]+$#i 

Votre code était correct, vous avez juste besoin de^et $. Donc, cela signifie tous les caractères du début à la fin ne permet pas l'alphabet extérieur. La correspondance négative est préférée à la correspondance positive ici.

+0

cela signifie comme ceci: if (preg_match('#^[^a-z]+$#i', $string) echo 'outside alphabet found'; iroel

Questions connexes