187 votes

Expression régulière pour correspondre uniquement aux caractères alphabétiques

Je me demandais si je pouvais obtenir une expression régulière qui correspondrait à une chaîne ne comportant que des caractères alphabétiques, et uniquement ceux-ci.

2 votes

Quelque chose comme /^[a-zA-Z]+$/ devrait fonctionner.

11 votes

Est à un caractère alphabétique selon votre définition ? Quelle langue utilisez-vous ?

2 votes

Une chaîne vide doit-elle correspondre ?

233voto

anubhava Points 172509

Vous pouvez utiliser n'importe laquelle de ces 2 variantes :

/^[A-Z]+$/i
/^[A-Za-z]+$/

pour correspondre à une chaîne d'entrée composée d'alphabets ASCII.

  • [A-Za-z] correspondra à tous les alphabets (minuscules et majuscules).
  • ^ et $ s'assurera que rien d'autre que ces alphabets ne sera apparié.

Code :

preg_match('/^[A-Z]+$/i', "abcAbc^Xyz", $m);
var_dump($m);

Sortie :

array(0) {
}

Cas de test est pour le commentaire de l'OP qu'il veut faire correspondre seulement si il y a 1 ou plusieurs alphabets présents dans l'entrée. Comme vous pouvez le voir dans le cas de test, les correspondances ont échoué parce qu'il y avait ^ dans la chaîne d'entrée abcAbc^Xyz .

Note : Veuillez noter que la réponse ci-dessus ne correspond qu'aux alphabets ASCII et ne correspond pas aux caractères Unicode. Si vous voulez faire correspondre des lettres Unicode, utilisez :

/^\p{L}+$/u

Ici, \p{L} correspond à tout type de lettre, quelle que soit la langue

2 votes

Au lieu d'utiliser [A-Za-z] utiliser [A-z]

6 votes

Non, [A-z] est erroné car il correspond à beaucoup d'autres caractères et pas seulement à [A-Za-z]

0 votes

Hmm intéressant, je ne le savais pas. Est-ce qu'il y a d'autres langues ? Merci :)

64voto

Tim Pietzcker Points 146308

Si vous avez besoin d'inclure des caractères alphabétiques non-ASCII, et si votre regex supporte Unicode, alors

\A\pL+\z

serait la regex correcte.

Certains moteurs regex ne prennent pas en charge cette syntaxe Unicode mais autorisent l'utilisation de l'option \w un raccourci alphanumérique pour faire correspondre également les caractères non ASCII. Dans ce cas, vous pouvez obtenir tous les caractères alphabétiques en soustrayant les chiffres et les caractères de soulignement de l'expression \w comme ça :

\A[^\W\d_]+\z

\A correspond au début de la chaîne, \z à la fin de la chaîne ( ^ et $ correspondent également au début/à la fin des lignes dans certains langages comme Ruby, ou si certaines options regex sont définies).

51 votes

+1 pour ne pas considérer l'alphabet anglais comme l'unique alphabet

8 votes

+1, même chose que ci-dessus. l'anglais n'est pas le seul alphabet et de nombreuses personnes écrivent leur nom en utilisant des caractères non ascii pour l'exprimer correctement.

23voto

stevecomrie Points 1190

Cela correspondra à un ou plusieurs caractères alphabétiques :

/^[a-z]+$/

Vous pouvez le rendre insensible à la casse en utilisant :

/^[a-z]+$/i

ou :

/^[a-zA-Z]+$/

2 votes

Cela ne correspondra qu'aux caractères latins.

15voto

jshkol Points 867

En Ruby et dans d'autres langages qui supportent les classes de caractères POSIX dans les expressions entre parenthèses, vous pouvez faire simplement :

/\A[[:alpha:]]+\z/i

Cela correspondra aux caractères alpha dans toutes les langues de l'alphabet Unicode. C'est facile.

Plus d'informations : http://en.wikipedia.org/wiki/Regular_expression#Character_classes http://ruby-doc.org/core-2.0/Regexp.html

1 votes

Et pour obtenir tout sauf ces caractères (ce qui n'était pas documenté) utilisez [^[:alpha]] .

6voto

Frazell Thomas Points 4455

[a-zA-Z] devrait faire ça très bien.

Vous pouvez faire référence l'antisèche .

5 votes

Oui, mais si ma chaîne de caractères contenait un caractère non verbal, elle correspondrait quand même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X