Я дивився на переповнення стека ( замінюючи символи .. е , як JavaScript не відповідає стандарту Unicode щодо RegExp тощо) і не знайшов конкретної відповіді на питання:
How can JavaScript match for accented characters (those with diacritical marks)?
Я змушую поле в інтерфейсі відповідати формату: last_name, first_name
(останній [пробіл комами] спочатку) , і я хочу надати підтримку діакритики, але, очевидно, в JavaScript це трохи складніше, ніж в інших мовах / платформах.
Це була моя оригінальна версія, доки я не хотів додати діакритичну підтримку:
/^[a-zA-Z]+,\s[a-zA-Z]+$/
В даний час я обговорюю один з трьох методів додати підтримку, які я протестував і працюю (принаймні, певною мірою, я не знаю, що таке "ступінь" другого підходу). Ось вони:
Явно перелічуються всі наголошені символи, які я хотів би прийняти як дійсні (кульгаві та надмірно складні):
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àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+$/
- Це правильно відповідає прізвище / ім’я будь-яким із підтримуваних наголошених символів у
accentedCharacters
.
Мій інший підхід полягав у використанні .
класу символів, щоб мати простіший вираз:
var regex = /^.+,\s.+$/;
- Цей матч буде просто ні про що, по крайней мере , в вигляді:
something, something
. Я гадаю, гаразд ...
Останній підхід, який я щойно знайшов, може бути простішим ...
/^[a-zA-Z\u00C0-\u017F]+,\s[a-zA-Z\u00C0-\u017F]+$/
- Він відповідає ряду символів Unicode - перевірених і працюючих, хоча я не спробував нічого божевільного, просто звичайні речі, які я бачу в нашому мовному відділі щодо імен членів факультету.
Ось мої проблеми:
- Перше рішення є занадто обмежуючим, і неохайним і суворим. Це потрібно було б змінити, якби я забув персонажа чи двох, і це просто не дуже практично.
- Друге рішення краще, стисло, але воно, мабуть, відповідає набагато більше, ніж насправді повинно бути. Я не зміг знайти жодної реальної документації щодо того , що саме
.
відповідає, просто узагальнення "будь-якого символу, крім символу нової лінії" (з таблиці на MDN ). Третє рішення, здається, є найбільш точним, але чи є якісь голоси? Я не дуже знайомий з Unicode, принаймні на практиці, але дивлячись на кодову таблицю / продовження цієї таблиці ,
\u00C0-\u017F
здається, досить солідним, принаймні, на мій очікуваний вклад.- Факультет не надсилатиме форми з їх іменами рідною мовою (наприклад, арабською, китайською, японською тощо), тому мені не доведеться турбуватися про символи набору символів, які не є латинськими.
Тож справжнє питання : Який із цих трьох підходів найбільше підходить для виконання завдання? Або є кращі рішення?
regex = /^[^,]+,\s[^,]+$/;
щоб запобігти цьому.