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


157

Je me demandais si je pouvais obtenir une expression régulière qui correspondra à une chaîne qui n'a que des caractères alphabétiques, et cela seul.


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

10
Un àcaractère alphabétique correspond-il à votre définition? Quelle langue utilisez-vous?
Tim Pietzcker

2
une chaîne vide doit-elle correspondre?
ysth

non, une chaîne vide ne doit pas correspondre
Steffan Harris

Une note importante: vous n'avez pas fait référence à un langage ou à un outil dans lequel vous souhaitez utiliser l'expression régulière que vous demandez. Bien que les principes des expressions régulières soient les mêmes universellement, la syntaxe n'est pas également partout. Vous devez indiquer où vous souhaitez l'utiliser.
sergiol

Réponses:


186

Vous pouvez utiliser l'une de ces 2 variantes:

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

pour correspondre à une chaîne d'entré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 correspondra.

Code:

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

Production:

array(0) {
}

Le cas de test concerne le commentaire d'OP auquel il souhaite faire correspondre uniquement s'il y a un ou plusieurs alphabets présents dans l'entrée. Comme vous pouvez le voir dans le cas de test, les correspondances ont échoué car il y avait ^dans la chaîne d'entrée abcAbc^Xyz.

Remarque: veuillez noter que la réponse ci-dessus correspond uniquement aux alphabets ASCII et ne correspond pas aux caractères Unicode. Si vous souhaitez faire correspondre les lettres Unicode, utilisez:

/^\p{L}+$/u

Ici, \p{L}correspond à tout type de lettre de n'importe quelle langue


22
Dans certains dialectes, [Az] correspondra aux valeurs de ponctuation ASCII qui se produisent entre 'Z' et 'a', en particulier '[', '\', ']', '^', '-' et '`', comme ainsi que «A» à «Z» et «a» à «z».
Lee

Ce que je voulais vraiment, c'est un moyen de faire correspondre ma chaîne uniquement lorsqu'elle a des caractères alphabétiques, si elle a un caractère non alphabétique, elle ne doit pas correspondre.
Steffan Harris

7
@Lee: Pas certains. Tous. Cette expression régulière est erronée dans son état actuel.
Tim Pietzcker

7
\w is shorthand for A-Za-z- pas vraiment, \west un raccourci pour[a-zA-Z0-9_]
anubhava

1
Bon point @ jpmc26. J'ai modifié ma réponse pour supprimer mon erreur d'origine.
anubhava le

55

Si vous devez inclure des caractères alphabétiques non ASCII, et si votre saveur regex prend en charge Unicode, alors

\A\pL+\z

serait la bonne regex.

Certains moteurs regex ne prennent pas en charge cette syntaxe Unicode mais permettent au \wraccourci alphanumérique de correspondre également aux caractères non ASCII. Dans ce cas, vous pouvez obtenir tous les caractères alphabétiques en soustrayant des chiffres et des traits de soulignement \wcomme ceci:

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

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


38
+1 pour ne pas considérer l'alphabet anglais comme le seul alphabet
srcspider

7
+1, comme 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.
Ben Barkay

22

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]+$/

Cela correspondra uniquement aux caractères latins.
quotesBro

13

Dans Ruby et d'autres langages prenant en charge les classes de caractères POSIX dans les expressions entre crochets, vous pouvez faire simplement:

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

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

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


1
Et pour obtenir tout sauf ces caractères (qui n'ont pas été documentés), utilisez [^[:alpha]].
spyle

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.