Настроение сейчас - нормальное
Сегодня по долгу службы, пришлось писать регулярное выражение для валидации введенных пользователем Фамилии Имени Отчества. Увы, но великий и мудрый Гугль с Яндексом в лице моей любимой поисковой системы Nigma (http://www.nigma.ru), не смогли связать и двух слов по этой теме. Пришлось думать самому.
Конечно, проверка соответствия английского имени пользователя вполне тривиальная задача:
/^[A-Z][a-z]{2,}\040[A-Z][a-z]{2,}$/
Это регулярное выражение проверяет наличие в валидируемой строке двух слов разделенных пробелом, которые начинаются с латинских символов в верхнем регистре и состоят из тех же символов, но в нижнем регистре. причем слова эти должны иметь длину от 2-х букв и более.
Что ж, остается учесть, что в русском и украинском языках есть еще и отчество, в итоге получим такое выражение для русского:
/^
([А-Я][а-я]{2,}
\040
[А-Я][а-я]{2,}
\040
[А-Я][а-я]{2,}
$/
То есть, то же самое что для английского варианта, но с еще одним словом и русскими буквами.
Дальше - проще.
В украинском варианте стоит учесть наличие таких символов как І і Ї ї Є є Ґ ґ откуда получаем regex такого вида:
/^
[\xa5\xaf\xb2\xaaА-Я][\xb4\xb3\xbf\xba\x27а-я]{2,}
\040
[\xa5\xaf\xb2\xaaА-Я][\xb4\xb3\xbf\xba\x27а-я]{2,}
\040
[\xa5\xaf\xb2\xaaА-Я][\xb4\xb3\xbf\xba\x27а-я]{2,}
$/
Чудненько! А теперь осталось учесть, что некоторые люди берут себе двойные фамилии, то есть к своей собственной добавляют еще и фамилию мужа, жены или для женщин - сохраняют девичью фамилию.
Такие фамилии пишутся через дефис, что мы и отразим в результирующем выражении, получив на выходе моего мозга следующее:
/^
([\xa5\xaf\xb2\xaaА-Я][\xb4\xb3\xbf\xba\x27а-я]{2,}
|
[\xa5\xaf\xb2\xaaА-Я][\xb4\xb3\xbf\xba\x27а-я]{2,}
\-
[\xa5\xaf\xb2\xaaА-Я][\xb4\xb3\xbf\xba\x27а-я]{2,})
\040
[\xa5\xaf\xb2\xaaА-Я][\xb4\xb3\xbf\xba\x27а-я]{2,}
\040
[\xa5\xaf\xb2\xaaА-Я][\xb4\xb3\xbf\xba\x27а-я]{2,}
$/
Соглашусь, что для вариантов с Сен-Жюст, Мак-Магон можно и в выражении для английского языка предусмотреть использование дефиса, если они там конечно бывают.
Вот в общем-то и всё. Теперь в инете будет хоть какой-то образец подобной валидации.
Полученное регулярное выражение предназначено для проверки соответствия строки введенной пользователем формату Фамилии Имени Отчества для русского и украинского языков одновременно. Если же понадобиться анализ только русских имен, то конечно следует исключить лишние символы из этого регекса.
Теперь некий гипотетический В'яїсненко-Марусяк Мар'ян Іґнатович будет валидироваться как корректная строка ФИО!
Вот так-то...
Кстати, популярно о регулярных выражениях советую почитать здесь:
http://www.pcre.ru/
а в контексте модуля mod_rewrite тут:
http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html
[480x486]
Исходное сообщение Аноним А что делать с такой Фамилией Петро-Абу-Малахович ?А бывают и такие извраты? Ну, это просто - добавить еще один вариант с дефисом.