Spojrzałem na Stack Overflow ( zastępowanie znaków ... eh , jak JavaScript nie jest zgodny ze standardem Unicode dotyczącym RegExp itp.) I tak naprawdę nie znalazłem konkretnej odpowiedzi na pytanie:
How can JavaScript match for accented characters (those with diacritical marks)?
Zmuszam pole w interfejsie użytkownika, aby pasowało do formatu: last_name, first_name
(najpierw ostatnie [przecinek]) i chcę zapewnić obsługę znaków diakrytycznych, ale najwyraźniej w JavaScript jest to nieco trudniejsze niż w innych językach / platformach.
To była moja oryginalna wersja, dopóki nie chciałem dodać znaków diakrytycznych:
/^[a-zA-Z]+,\s[a-zA-Z]+$/
Obecnie rozważam jedną z trzech metod dodawania wsparcia, z których wszystkie przetestowałem i działam (przynajmniej do pewnego stopnia nie bardzo wiem, jaki jest „zakres” drugiego podejścia). Tutaj są:
Wyraźnie wymieniając wszystkie znaki akcentowane, które chciałbym zaakceptować jako prawidłowe (kiepskie i zbyt skomplikowane):
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àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+$/
- To poprawnie dopasowuje nazwisko / imię do dowolnego z obsługiwanych znaków akcentowanych w
accentedCharacters
.
Moje inne podejście polegało na użyciu .
klasy znaków, aby uzyskać prostsze wyrażenie:
var regex = /^.+,\s.+$/;
- To pasuje do czegokolwiek, co najmniej w formie:
something, something
. To chyba w porządku ...
Ostatnie podejście, które właśnie znalazłem, może być prostsze ...
/^[a-zA-Z\u00C0-\u017F]+,\s[a-zA-Z\u00C0-\u017F]+$/
- Pasuje do wielu znaków Unicode - przetestowanych i działających, chociaż nie próbowałem niczego szalonego, tylko normalne rzeczy, które widzę w naszym dziale językowym dla nazwisk członków wydziału.
Oto moje obawy:
- Pierwsze rozwiązanie jest zbyt ograniczone, a do tego niechlujne i zawiłe. Musiałbym to zmienić, gdybym zapomniał o postaci lub dwóch, a to nie jest zbyt praktyczne.
- Drugie rozwiązanie jest lepsze, zwięzłe, ale prawdopodobnie pasuje znacznie bardziej niż powinno. Nie mogłem znaleźć żadnej prawdziwej dokumentacji na temat tego , co dokładnie
.
pasuje, tylko uogólnienie „dowolnego znaku oprócz znaku nowej linii” (z tabeli w MDN ). Trzecie rozwiązanie wydaje się najbardziej precyzyjne, ale czy są jakieś pułapki? Nie jestem zaznajomiony z Unicode, przynajmniej w praktyce, ale patrząc na tabelę kodów / kontynuację tej tabeli ,
\u00C0-\u017F
wydaje się być całkiem solidna, przynajmniej jak na mój oczekiwany wkład.- Wydział nie będzie przesyłać formularzy z nazwiskami w ich języku ojczystym (np. Arabskim, chińskim, japońskim itp.), Więc nie muszę się martwić o znaki spoza zestawu znaków łacińskich
A więc prawdziwe pytanie (a) : które z tych trzech podejść jest najbardziej odpowiednie do tego zadania? A może są lepsze rozwiązania?
regex = /^[^,]+,\s[^,]+$/;
aby temu zapobiec.