J'ai regardé Stack Overflow ( remplacement de caractères ... hein , comment JavaScript ne suit pas le standard Unicode concernant RegExp , etc.) et n'ai pas vraiment trouvé de réponse concrète à la question:
How can JavaScript match for accented characters (those with diacritical marks)?
Je force un champ dans une interface utilisateur à correspondre au format: last_name, first_name
(dernier [espace virgule] en premier) , et je veux fournir un support pour les signes diacritiques, mais évidemment en JavaScript, c'est un peu plus difficile que d'autres langages / plates-formes.
C'était ma version originale, jusqu'à ce que je veuille ajouter un support diacritique:
/^[a-zA-Z]+,\s[a-zA-Z]+$/
Actuellement, je suis en train de débattre de l'une des trois méthodes pour ajouter du support, que j'ai toutes testées et que je travaille (au moins dans une certaine mesure, je ne sais pas vraiment quelle est «l'étendue» de la deuxième approche). Les voici:
Liste explicite de tous les caractères accentués que je voudrais accepter comme valides (boiteux et trop compliqués):
var accentedCharacters = "àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ";
// Build the full regex
var regex = "^[a-zA-Z" + accentedCharacters + "]+,\\s[a-zA-Z" + accentedCharacters + "]+$";
// Create a RegExp from the string version
regexCompiled = new RegExp(regex);
// regexCompiled = /^[a-zA-ZàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+,\s[a-zA-ZàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+$/
- Cela correspond correctement à un nom / prénom avec l'un des caractères accentués pris en charge dans
accentedCharacters
.
Mon autre approche était d'utiliser la .
classe de caractères, pour avoir une expression plus simple:
var regex = /^.+,\s.+$/;
- Cela correspond à peu près tout, au moins sous la forme de:
something, something
. C'est bien je suppose ...
La dernière approche, que je viens de trouver, pourrait être plus simple ...
/^[a-zA-Z\u00C0-\u017F]+,\s[a-zA-Z\u00C0-\u017F]+$/
- Il correspond à une gamme de caractères Unicode - testé et fonctionnel, même si je n'ai rien essayé de fou, juste les trucs normaux que je vois dans notre département de langue pour les noms des professeurs.
Voici mes préoccupations:
- La première solution est beaucoup trop limitative, et bâclée et compliquée à cela. Il faudrait le changer si j'oubliais un personnage ou deux, et ce n'est tout simplement pas très pratique.
- La deuxième solution est meilleure, concise, mais elle correspond probablement beaucoup plus qu'elle ne le devrait réellement. Je n'ai pas trouvé de documentation réelle sur exactement ce qui
.
correspond, juste la généralisation de "n'importe quel caractère sauf le caractère de nouvelle ligne" (à partir d'une table sur le MDN ). La troisième solution semble la plus précise, mais y a-t-il des pièges? Je ne suis pas très familier avec Unicode, du moins en pratique, mais en regardant une table de code / suite de cette table ,
\u00C0-\u017F
semble être assez solide, du moins pour ma contribution attendue.- Les professeurs ne soumettront pas de formulaires avec leurs noms dans leur langue maternelle (par exemple, arabe, chinois, japonais, etc.), donc je n'ai pas à m'inquiéter des caractères non latins.
Donc la ou les vraies questions : laquelle de ces trois approches est la plus adaptée à la tâche? Ou existe-t-il de meilleures solutions?
.
atome correspond à tout sauf aux nouvelles lignes " est en fait assez exact :-)
regex = /^[^,]+,\s[^,]+$/;
pour éviter cela.