-Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в Smile_ArT

 -Сообщества

Читатель сообществ (Всего в списке: 1) Scrittore_di_talento

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.10.2007
Записей:
Комментариев:
Написано: 380

Регулярные выражения - валидация URL

Дневник

Четверг, 22 Мая 2008 г. 23:39 + в цитатник

Настроение сейчас - супер

В рунете, оказалось, проблематично найти не только регулярное выражение для валидации ФИО, которое пришлось в итоге писать самому, но и для проверки банального URL.

На этот раз, отделался легким испугом: нашел выражение на западном ресурсе и слегка модифицировал его для соответствия требованиям.

Сам же требования, кстати, нашел вот тут: http://zcontest.ru/2008.02/zrex.php


... правильным URL считаются адреса http и https, явное указание протокола также может отсутствовать. Учитываются только адреса, состоящие из символов, т.е. IP адреса в качестве URL не присутствуют при проверке. Допускаются поддомены, указание порта доступа через двоеточие, GET запросы с передачей параметров, доступ к подпапкам на домене, допускается наличие якоря через решетку. Однобуквенные домены считаются запрещенными. Запрещены спецсимволы, например «-» в начале и конце имени домена. Запрещен символ «_» и пробел в имени домена. При составлении регулярного выражения ориентируйтесь на список правильных и неправильных выражений заданных ниже.

Пример правильных выражений:

http://www.zcontest.ru
http://zcontest.ru
http://zcontest.com
https://zcontest.ru
https://sub.zcontest-ru.com:8080
http://zcontest.ru/dir%201/dir_2/program.ext?var1=x&var2=my%20value
zcon.com/index.html#bookmark

Пример неправильных выражений:

Just Text.
http://a.com
http://www.domain-.com



/^(https?:\/\/)?(([0-9a-z_!~*'().&=+$%-]+:)
?[0-9a-z_!~*'().&=+$%-]+@)?(([0-9]{1,3}\.){3}
[0-9]{1,3}
|
([0-9a-z_!~*'()-]+
\.)*
([0-9a-z][0-9a-z-]{0,61})+
[0-9a-z]
\.
[a-z]{2,6})
(:[0-9]{1,4})?((\/?)
|
(\/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+\/?)$/


Вот в общем-то и вся премудрость.

Тесты предложенные на вышеуказанном сайте это выражение проходит, а под те, что не проходило - подогнал напильничком. Надеюсь, кому-то пригодиться.

 (210x300, 68Kb)
Рубрики:  Программинг

Метки:  

Валидация ФИО

Дневник

Среда, 07 Мая 2008 г. 18:38 + в цитатник

Настроение сейчас - нормальное

Сегодня по долгу службы, пришлось писать регулярное выражение для валидации введенных пользователем Фамилии Имени Отчества. Увы, но великий и мудрый Гугль с Яндексом в лице моей любимой поисковой системы 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, 23Kb)

Рубрики:  Программинг

Метки:  

 Страницы: [1]