607 votes

Expression rationnelle pour correspondre uniquement aux lettres

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

72 votes

Quelle est votre définition des caractères? ASCII? Kanji? Iso-XXXX-X? UTF8?

60 votes

Quelle est votre définition du regex? Perl? Emacs? Grep?

6 votes

J'ai remarqué que \p{L} pour une lettre et le drapeau /u pour Unicode correspondent à n'importe quelle lettre dans mon regex, c'est-à-dire /\p{L}+/u

602voto

Gumbo Points 279147

Utilisez un ensemble 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]+$ correspond uniquement aux chaînes qui se composent d'une ou plusieurs lettres seulement (^ et $ marquent respectivement le début et la fin d'une chaîne).

Si vous voulez correspondre à d'autres lettres que A à Z, vous pouvez soit les ajouter à l'ensemble de caractères: [a-zA-ZäöüßÄÖÜ]. Ou vous pouvez utiliser des classes de caractères prédéfinies comme la classe de propriété de caractères Unicode \p{L} qui décrit les caractères Unicode qui sont des lettres.

168 votes

C'est une solution très centrée sur l'ASCII. Cela ne fonctionnera pas avec à peu près n'importe quel texte non-anglais.

12 votes

@Joachim Sauer: Cela risquerait plutôt de ne pas fonctionner sur les langues utilisant des caractères non latins.

23 votes

Déjà en panne sur 90% des textes en allemand, sans même mentionner le français ou l'espagnol. L'italien pourrait encore s'en sortir assez bien cependant.

269voto

RobV Points 13708

\p{L} correspond à n'importe quel caractère Unicode qui est une lettre si vous vous intéressez aux alphabets autres que le latin

2 votes

Pas dans toutes les saveurs regex. Par exemple, les regex de vim traitent \p comme "caractère imprimable".

4 votes

Cette page suggère seulement que les regexes de java, .net, perl, jgsoft, XML et XPath supportent \p{L}. Mais les grandes omissions sont : python et ruby (bien que python ait le module regex).

6 votes

@Philip Potter : Ruby prend en charge les propriétés de caractères Unicode en utilisant la même syntaxe exacte.

72voto

Molske Points 1596

En fonction de votre définition de "caractère" :

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

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

0 votes

Je voulais des lettres. Cependant, cela ne semble pas fonctionner. preg_match('/[a-zA-Z]+/', $name);

1 votes

[A-Za-z] est juste la déclaration des caractères que vous pouvez utiliser. Vous devez toujours déclarer combien de fois cette déclaration doit être utilisée : [A-Za-z]{1,2} (pour correspondre à 1 ou 2 lettres) ou [A-Za-z]{1,*} (pour correspondre à 1 lettre ou plus)

34 votes

Well à, á, ã, Ö, Ä... sont aussi des lettres, de même que , , , , , , , , , , , , , , ... fr.wikipedia.org/wiki/Lettre_(alphabet)

37voto

blue_note Points 701

La meilleure option disponible est

[\u\l]+

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

[a-zA-Z]+

comme le suggèrent d'autres utilisateurs

3 votes

Ne correspondra à aucun caractère spécial cependant.

0 votes

Pendant longtemps, j'utilisais [A-z]+ mais je viens de remarquer que cela permet à quelques caractères spéciaux comme ` et [ de se glisser. [a-zA-Z]+ est en effet la bonne solution.

13voto

Rohit Dubey Points 101

Pour PHP, ce qui suit fonctionnera très bien

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

0 votes

Mais, cela ne fonctionnera pas pour les caractères latins. Vérifiez-le ici.

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