• Авторизация


Регулярные выражения - валидация URL 22-05-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]
вверх^ к полной версии понравилось! в evernote
Комментарии (13):
20-05-2009-19:29 удалить
Главное преимущество этой регулярки по сравнению с другими найдеными мной в интернете - проверка правильности всего урл (а не только доменного имени). Один минус - в ссылке теоретически могут быть и заглавные буквы. Если не ошибаюсь, на unix-серверах ссылки чувствительны ругистру. Я не силен в регулярных выражениях, поэтому проблему решил использовав функцию strtolower() перед проверкой. Smile ArT, огромное спасибо, очень пригодилось
Smile_ArT 20-05-2009-19:37 удалить
Ответ на комментарий # Всегда рад помочь :)
15-07-2009-16:48 удалить
Спасибо огромное!!!
Smile_ArT 15-07-2009-16:50 удалить
Ответ на комментарий # Таки всегда пожалуйста
01-11-2009-20:11 удалить
а как для php написать?
17-12-2009-18:40 удалить
Спасибо за пост, вроде работает :) Если кому надо, на php проверяю так: $tmp_url = 'http://www.google.com.ua/search?hl=ru&q=%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5+%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F+php+%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0+url&sourceid=navclient-ff&rlz=1B6_____ruUA349UA349&ie=UTF-8'; $url_regexp = '/^(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_!~*'().;?:@&=+$,%#-]+)+\/?)$/i'; if (preg_match($url_regexp, $tmp_url)) { $url_arr[] = $tmp_url; } else { $bad_url_arr[] = $tmp_url; }
09-07-2010-13:05 удалить
очень пригодилось, спасибо большое автору
Smile_ArT 10-07-2010-01:20 удалить
Ответ на комментарий # Отлично что помогло! И Вам спасибо что не поленились поблагодарить - очень приятно.
11-05-2012-15:35 удалить
Ответ на комментарий # спасибо огромное!


Комментарии (13): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Регулярные выражения - валидация URL | Smile_ArT - Дневник Smile_@rT | Лента друзей Smile_ArT / Полная версия Добавить в друзья Страницы: раньше»