L'expression rationnelle étendue à l'alphabet latin (ä ö ü è ß)
Je veux Chaîne de base de test dans Node.js. Supposons que j'ai un formulaire où les utilisateurs entrent leur nom et je veux vérifier si c'est juste de la foutaise ou un nom réel.
Heureusement (ou malheureusement pour mon check), je reçois les utilisateurs de partout dans le monde ce qui signifie que leurs noms contiennent des caractères non anglais, comme ä ö ü ß é
. J'avais l'habitude d'utiliser /[A-Za-z -]{2,}/
mais cela ne correspond pas à des noms comme "Jan Buschtöns"
.
Dois-je ajouter manuellement tous les non-anglais, mais avec les caractères latins pour ma RegEx pour travailler? Je ne veux pas de+ de 100 caractères RegEx comme /[A-Za-z -äöüÄÖÜßéÉèÈêÊ...]{2,}/
.
/\w+/
ne fonctionnent pas. Ils ne correspondent caractères en anglais, aussi.Et qu'advient-il si vous demandez à quelqu'un avec un Salish nom? Le langues Salish utilisation
7
comme une lettre, par exemple "Sḵwxwú7mesh"; et sur un moins obscur noter, qu'en coréen, Japonais, Chinois, ... Vous pourriez vouloir lire Mensonges Programmeurs Croire au Sujet de Noms. Je suis fondamentalement ce qui suggère que vous ne vous souciez pas du tout avec votre vérification.J'ai déjà pensé asiatique et kyrillic langues. Le latin équivalents qu'ils peuvent utiliser. Et... Salish est un cas très rare. 😀
OriginalL'auteur buschtoens | 2012-07-28
Vous devez vous connecter pour publier un commentaire.
Vérifier http://www.regular-expressions.info/unicode.html et http://xregexp.com/plugins/
Vous devez utiliser
\p{L}
pour correspondre à n'importe quelle lettre de caractères si vous souhaitez inclure unicode.Parlant unicode, alternative de
\w
est[\p{L}\p{N}_]
ensuite.OriginalL'auteur Ωmega
La réponse dépend exactement ce que vous voulez faire.
Comme vous l'avez remarqué,
[A-Za-z]
seules les correspondances en lettres latines sans signes diacritiques.Si vous ne se soucient allemand signes diacritiques et de la ß ligature, alors vous pouvez simplement remplacer la partie avec
[A-Za-zÄÖÜäöüß]
, par exemple:Mais ce n'est probablement pas ce que vous voulez faire. Vous voulez probablement pour faire correspondre les lettres latines avec tous les signes diacritiques, et pas seulement ceux qui sont utilisés en allemand. Ou peut-être que vous voulez faire correspondre toutes les lettres de tout l'alphabet, et pas seulement en Latin.
D'autres expressions régulières dialectes ont des classes de caractère pour vous aider avec des problèmes de ce genre, mais, malheureusement, JavaScript expression régulière dialecte a très peu de classes de caractères et aucun d'entre eux vous aider ici.
(Dans le cas où vous ne savez pas, un “caractère de classe” est une expression qui correspond à tout caractère qui est membre d'un groupe prédéfini de caractères. Par exemple,
\w
est une classe de caractères qui correspond à tout type de lettre ou d'un chiffre ou un caractère de soulignement, et.
est une classe de caractères qui correspond à tout caractère).Cela signifie que vous avez à la liste de chaque plage de code UTF-16 unités qui correspond à un caractère que vous voulez de match.
Un rapide et sale solution pourrait être de dire
[a-zA-Z\u0080-\uFFFF]
, ou en totalité:Cela va correspondre à n'importe quelle lettre de la plage ASCII, mais correspond aussi à n'importe quel caractère à tout ce qui est en dehors de la plage ASCII. Cela inclut tous les possibles de caractères alphabétiques, avec ou sans signes diacritiques dans le script. Cependant, il comprend également un grand nombre de caractères qui ne sont pas des lettres. Les Non-lettres dans la plage ASCII sont exclus, mais les non-lettres à l'extérieur de la plage ASCII sont inclus.
Ci-dessus pourrait être assez bon pour vos besoins, mais si ce n'est pas le cas, alors vous aurez à comprendre ce qui les plages de caractères dont vous avez besoin et spécifier explicitement.
OriginalL'auteur Daniel Cassidy