285 votes

Expression régulière pour correspondre aux caractères non ASCII ?

Quel est le moyen le plus simple de faire correspondre des caractères non ASCII dans une regex ? Je voudrais faire correspondre tous les mots individuellement dans une chaîne d'entrée, mais la langue peut ne pas être l'anglais, donc je devrai faire correspondre des choses comme ü, ö, ß et ñ. De plus, comme il s'agit d'une application Javascript/jQuery, toute solution devra s'appliquer à cette dernière.

1 votes

Voulez-vous faire correspondre toutes les lettres ou tous les caractères ? Par exemple, voulez-vous inclure la ponctuation, les chiffres, les espaces, les signes et les symboles arbitraires ? Si vous dites que vous voulez faire correspondre all words donne l'impression que vous ne voulez que des lettres non anglaises et non pas tous les caractères non anglais comme l'indique le titre de votre question.

5voto

olle Points 933

Vous procédez de la même manière que pour toute autre correspondance de caractères, mais vous utilisez \uXXXX où XXXX est le numéro unicode du caractère.

Regardez : http://unicode.org/charts/charindex.html

http://unicode.org/charts/

http://www.decodeunicode.org/

1 votes

À l'exception du fait que la recherche de chaque élément pouvant être appelé un caractère sans ajouter de symboles spéciaux, tels que les espaces, la ponctuation, etc. est une tâche considérable.

4voto

OregonGhost Points 16615

Toutes les saveurs de Regex compatibles avec Unicode devraient avoir une classe de caractères spéciaux comme \w qui correspondent à n'importe quelle lettre Unicode. Jetez un coup d'œil à votre saveur spécifique ici .

7 votes

C'est correct pour la plupart des expressions rationnelles, mais pas pour JavaScript, du moins d'après la base de données de la Commission européenne. expressions-régulières.info/javascript.html

0 votes

Pas de chance alors, je suppose. Au moins, vous pouvez utiliser les tableaux Unicode postés par olle pour trouver vos caractères ;)

0 votes

Je pense \w dépend du contexte culturel du client.

0voto

Jonathan Points 63

J'ai eu un problème avec \p fonctionne comme prévu, donc j'ai juste utilisé une stratégie différente comme :

([^\t]+)\t

Trouver tout ce qui n'est pas un caractère de tabulation jusqu'au prochain caractère de tabulation... évidemment cela dépend de votre source de recherche, mais vous avez l'idée. Maintenant, je n'ai plus besoin de comprendre quels caractères unicode fonctionnent et ne fonctionnent pas, etc.

-18voto

Vinoj Points 1

^[a-zA-Z]+$ cela ne peut vérifier que les lettres anglaises. Je veux dire de a à z et de A à Z. Donc si ça renvoie faux, cela signifie que le contenu a des lettres non anglaises.

En c#, vous écrirez ceci comme

Regex EnglisLetters = new Regex("^[a-zA-Z]+$");
return EnglisLetters.IsMatch(checkThis);

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