Регулярка по проверки имени на 3-х языках.

Royal Flash

-=MaestrO=-
Задача: проверить корректность ввода имени на 3-х языках: английский, русский ИЛИ украинский. "ИЛИ" не зря написано заглавными буквами, так как, например, в английском имени не должны встречаться русские или украинские буквы, в украинском и английском имени может быть апостроф и т.п. и т.д.

Ничего лучше примера ниже, я не придумал:

PHP:
preg_match('!(?:^[а-яё]+[\-]?[а-яё]+$)|(?:^[a-z]+[\-\`]?[a-z]+$)|(?:^[абвгґдеєжзиіїйклмнопрстуфхцчшщьюя]+[\-\`]?[абвгґдеєжзиіїйклмнопрстуфхцчшщьюя]+$)!i', $name);
Возможно кто-то подскажет, как в последней части регулярки, проверяющей украинские имена, не использовать весь алфавит, а обойтись только интервалами? Что то на подобии: диапозон [а-яєїі] кроме [^ыэ...].

И если заглянуть еще глубже - как описать ситуацию, когда, например, в английском имени может встречаться сразу тире и апостроф?
 

SiZE

Новичок
И если заглянуть еще глубже - как описать ситуацию, когда, например, в английском имени может встречаться сразу тире и апостроф?
Можно ограничиться этим:
[a-z][a-z-`]+

В целом есть ли смысл в такой жесткой проверки? Пользователь ведь может ввести Ааааааааа Ббббббб Ввввввв. Тоже не валидное имя будет. Плюс если кодировка UTF-8 условие для русских букв будет отрабаывать не корректно, надо весь алфавит перечислять прописных и строчных.
 

Royal Flash

-=MaestrO=-
В целом есть ли смысл в такой жесткой проверки? Пользователь ведь может ввести Ааааааааа Ббббббб Ввввввв.
Может, но чем больше проверок (не сложных и не ресурсоемких), тем меньше шанс ошибочного ввода. Особенно, это актуально для случаев, когда имя, например "Алeксей" введено с английской "e". На вид одинаково, а вот найти поиском - проблематично. Попробуйте найти на этой странице имя А...ей поиском через браузер. А что уже говорить, если нужно его найти в БД?!
 

akd

dive now, work later
Команда форума
только ненадо фантазировать, если введено Алексей с английской "е", это не ошибка. это сделано намеренно.
отсюда решение, тебе не надо отлавливать всякие "ґ", "ї" а только те знаки, которые выглядят одиннаково в русском и английском. а это уже другая задача.
 

SiZE

Новичок
Может, но чем больше проверок (не сложных и не ресурсоемких), тем меньше шанс ошибочного ввода. Особенно, это актуально для случаев, когда имя, например "Алeксей" введено с английской "e". На вид одинаково, а вот найти поиском - проблематично. Попробуйте найти на этой странице имя А...ей поиском через браузер. А что уже говорить, если нужно его найти в БД?!
С разделением по языкам то я как раз согласен. Я в целом про такие условия [a-z]+[\-\`]?[a-z]+. И предлагаю ограничиться тем, что первый символ обязательно должен быть буквой, а остальные могут содержать N-ое количество символов из набора.
 

Royal Flash

-=MaestrO=-
akd
а только те знаки, которые выглядят одиннаково в русском и английском
- полный бред. Имя вида "Аleксеї" никому не нужно. Регулярка, по поиску предложенного тобой варианта - будет больше.

SiZE
а остальные могут содержать N-ое количество символов из набора
А вы знаете имена в украинском, русском и английском языках, которые оканчиваются на что-то отличное от буквы?
 
Сверху