web-dev-qa-db-fra.com

Regex pour ne faire correspondre que des lettres

Comment puis-je écrire une regex qui ne correspond qu'à des lettres?

318
Nike

Utilisez un jeu de caractères: [a-zA-Z] correspond à une lettre de A à Z en minuscule et en majuscule. [a-zA-Z]+ correspond à une ou plusieurs lettres et ^[a-zA-Z]+$ ne correspond qu'à des chaînes composées d'une ou plusieurs lettres uniquement (^ et $ marquent le début et la fin d'une chaîne, respectivement).

Si vous souhaitez faire correspondre d'autres lettres que A – Z, vous pouvez les ajouter au jeu de caractères suivant: [a-zA-ZäöüßÄÖÜ]. Vous pouvez également utiliser des classes de caractères prédéfinies, telles que propriété de caractère Unicode class \p{L} qui décrit les caractères Unicode qui sont des lettres.

338
Gumbo

\p{L} correspond à tout ce qui est une lettre Unicode si vous êtes intéressé par des alphabets autres que le latin

166
RobV

En fonction de votre signification de "personnage":

[A-Za-z] - toutes les lettres (majuscules et minuscules)

[^0-9] - tous les caractères non numériques

42
KristofMols

L'option disponible la plus proche est

[\u\l]+

qui correspond à une séquence de lettres majuscules et minuscules. Cependant, il n'est pas supporté par tous les éditeurs/langues, il est donc probablement plus sûr d'utiliser

[a-zA-Z]+

comme le suggèrent d'autres utilisateurs

28
blue_note

Vous utiliseriez

/[a-z]/gi

[] - vérifie s'il y a des caractères entre des entrées données

a-z --- couvre tout l'alphabet

g ----- globalement sur toute la chaîne

i ----- obtenir majuscules et minuscules

13
Scott

L’expression régulière que peu de gens ont écrite sous la forme "/ ^ [a-zA-Z] $/i" n’est pas correcte car, à la dernière mention, / i, qui est insensible à la casse et après correspondance pour première fois, il reviendra. Au lieu de / i, utilisez simplement / g, qui est pour global et vous n’aurez pas non plus besoin de mettre ^ $ pour commencer et terminer.

/[a-zA-Z]+/g
  1. [a-z _] + correspond à un seul caractère présent dans la liste ci-dessous
  2. Quantificateur: + Entre une et plusieurs fois, autant de fois que possible, redonner au besoin
  3. a-z un seul caractère compris entre a et z (sensible à la casse)
  4. A-Z un seul caractère compris entre A et Z (sensible à la casse)
  5. g modificateur: global. Tous les matchs (ne pas revenir au premier match)
12
Yogesh Chauhan

Pour PHP, cela fonctionnera bien

'/^[a-zA-Z]+$/'
11
Rohit Dubey
/[a-zA-Z]+/

Exemple super simple. Les expressions régulières sont extrêmement faciles à trouver en ligne.

http://www.regular-expressions.info/reference.html

10
Scott Radcliff

Java:

String s= "abcdef";

if(s.matches("[a-zA-Z]+")){
     System.out.println("string only contains letters");
}
8
Udeshika Sewwandi

Utilisez simplement \w ou [:alpha:]. C’est une séquence d’échappement qui ne correspond qu’aux symboles pouvant figurer dans les mots.

6
Agaspher

Utiliser des groupes de caractères

\D

Correspond à n'importe quel caractère sauf les chiffres 0 à 9

^\D+$

Voir exemple ici

5
Tomáš Nedělka

Si vous voulez parler de lettres dans n'importe quel codage de caractères, une bonne approche pourrait être de supprimer les lettres autres que les espaces \s, digits \d et d'autres caractères spéciaux tels que:

[!@#\$%\^&\*\(\)\[\]:;'",\. ...more special chars... ]

Ou utilisez la négation de la négation ci-dessus pour décrire directement n'importe quelle lettre:

\S \D and [^  ..special chars..]

Avantages:

  • Fonctionne avec toutes les saveurs de regex.
  • Facile à écrire, gagnez parfois beaucoup de temps.

Les inconvénients:

  • Long, parfois pas parfait, mais le codage de caractères peut aussi être cassé.
3
Sławomir Lenart

Vous pouvez essayer cette expression régulière: [^\W\d_] ou [a-zA-Z].

3
Motlab

motif =/[a-zA-Z] /

met "[a-zA-Z]: # {pattern.match (" mine blossom ")}" OK

met "[a-zA-Z]: # {pattern.match (" 456 ")}"

met "[a-zA-Z]: # {pattern.match (" ")}"

met "[a-zA-Z]: # {pattern.match (" # $% ^ & * ")}"

met "[a-zA-Z]: # {pattern.match (" # $% ^ & * A ")}" OK

1
Snm Maurya