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.

Steffan Harris
la source
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

anubhava
la source
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).

Tim Pietzcker
la source
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]+$/
stevecomrie
la source
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

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

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

Vous pouvez référencer la feuille de triche .

Frazell Thomas
la source
2
oui mais je le ferais aussi si ma chaîne contenait un caractère autre qu'un mot, elle correspondrait toujours
Steffan Harris