Ich habe auf Stack - Überlauf (sehe ersetzen Zeichen .. eh , wie JavaScript , um den Unicode - Standard über RegExp nicht folgen , etc.) und hat nicht wirklich eine konkrete Antwort auf die Frage gefunden:
How can JavaScript match for accented characters (those with diacritical marks)?
Ich zwinge ein Feld in einer Benutzeroberfläche dazu, dem Format zu entsprechen: last_name, first_name
(letztes [Komma] zuerst) , und ich möchte diakritische Zeichen unterstützen, aber in JavaScript ist es offensichtlich etwas schwieriger als in anderen Sprachen / Plattformen.
Dies war meine ursprüngliche Version, bis ich diakritische Unterstützung hinzufügen wollte:
/^[a-zA-Z]+,\s[a-zA-Z]+$/
Derzeit diskutiere ich über eine von drei Methoden, um Unterstützung hinzuzufügen, die ich alle getestet habe und arbeite (zumindest bis zu einem gewissen Grad weiß ich nicht wirklich, wie groß der zweite Ansatz ist). Hier sind sie:
Explizite Auflistung aller Zeichen mit Akzent, die ich als gültig akzeptieren möchte (lahm und übermäßig kompliziert):
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àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+$/
- Dies stimmt korrekt mit einem Nach- / Vornamen mit einem der unterstützten Zeichen mit Akzent in überein
accentedCharacters
.
Mein anderer Ansatz war, die .
Zeichenklasse zu verwenden , um einen einfacheren Ausdruck zu haben:
var regex = /^.+,\s.+$/;
- Dies würde für fast alles passen, zumindest in Form von :
something, something
. Das ist in Ordnung, nehme ich an ...
Der letzte Ansatz, den ich gerade gefunden habe, könnte einfacher sein ...
/^[a-zA-Z\u00C0-\u017F]+,\s[a-zA-Z\u00C0-\u017F]+$/
- Es passt zu einer Reihe von Unicode-Zeichen - getestet und funktioniert, obwohl ich nichts Verrücktes ausprobiert habe, nur das normale Zeug, das ich in unserer Sprachabteilung für Namen von Fakultätsmitgliedern sehe.
Hier sind meine Bedenken:
- Die erste Lösung ist viel zu einschränkend und schlampig und verworren. Es müsste geändert werden, wenn ich ein oder zwei Charaktere vergessen hätte, und das ist einfach nicht sehr praktisch.
- Die zweite Lösung ist besser, prägnant, passt aber wahrscheinlich weit mehr als sie eigentlich sollte. Ich konnte keine wirkliche Dokumentation darüber finden , was genau
.
übereinstimmt, nur die Verallgemeinerung von "irgendeinem Zeichen außer dem Zeilenumbruchzeichen" (aus einer Tabelle im MDN ). Die dritte Lösung scheint die genaueste zu sein, aber gibt es Fallstricke? Ich bin nicht sehr vertraut mit Unicode, zumindest in der Praxis, aber bei einer Suche Code - Tabelle / Fortsetzung der Tabelle ,
\u00C0-\u017F
scheint ziemlich fest zu sein, zumindest für meine erwartete Eingabe.- Die Fakultät wird keine Formulare mit ihren Namen in ihrer Muttersprache (z. B. Arabisch, Chinesisch, Japanisch usw.) einreichen, sodass ich mich nicht um Zeichen mit nicht lateinischem Zeichensatz kümmern muss
Die eigentliche Frage (n) : Welcher dieser drei Ansätze eignet sich am besten für die Aufgabe? Oder gibt es bessere Lösungen?
.
Atom passt zu allem außer Zeilenumbrüchen " ist eigentlich ziemlich genau :-)
regex = /^[^,]+,\s[^,]+$/;
, um das zu verhindern.