Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Регулярное выражение для проверки URL (https://javascript.ru/forum/events/5715-regulyarnoe-vyrazhenie-dlya-proverki-url.html)

Beck 31.10.2009 18:46

Регулярное выражение для проверки URL
 
Не подскажете пожалуйста?

Очень нужно для валидации в форме. Сам еще до регулярных выражений не добрался толком, только основы знаю.

Заранее спасибо! :)

Riim 01.11.2009 00:53

RegExp.url = '(?:(?:ht|f)tps?://)?(?:[\\-\\w]+:[\\-\\w]+@)?(?:[0-9a-z][\\-0-9a-z]*[0-9a-z]\\.)+[a-z]{2,6}(?::\\d{1,5})?(?:[?/\\\\#][?!^$.(){}:|=[\\]+\\-/\\\\*;&~#@,%\\wА-Яа-я]*)?';

'v-url': ['Требуется url адрес! Пример: www.mysite.ru', function(value) {
	return !value || (new RegExp('^' + RegExp.url + '$', 'i')).test(value);
}],


upd: вот еще: http://javascript.ru/forum/misc/5508...perssylki.html

Beck 01.11.2009 16:22

Жестко. :blink:

Еще бы кто то объяснил, какая часть выражения для чего нужна.

Я понимаю, что там сводка непринужденных и принужденных условий, но вот в конце вообще не разобрать, что творится.

javascript_pupil 03.11.2009 07:25

А какой смысл проверять URL на стороне клиента? Пользователь легко может такую проверку обойти и отправить в форму любые данные. Такие проверки надо делать на стороне сервера, соответственно не на javascript.

Octane 03.11.2009 07:29

Чтобы не отправлять зря ошибочные данные формы. КО

javascript_pupil 03.11.2009 07:37

Octane, а если у пользователя отключен javascript? Язык безусловно нужный, но только не для таких случаев.

Octane 03.11.2009 08:44

Я не отрицал, что на стороне сервера необходимо выполнять проверку.

Mizuho 01.02.2011 12:29

Цитата:

Сообщение от Riim
RegExp.url = '(?:(?:ht|f)tps?://)?(?:[\\-\\w]+:[\\-\\w]+@)?(?:[0-9a-z][\\-0-9a-z]*[0-9a-z]\\.)+[a-z]{2,6}(?::\\d{1,5})?(?:[?/\\\\#][?!^$.(){}:|=[\\]+\\-/\\\\*;&~#@,%\\wА-Яа-я]*)?';

http://VasheSoznanie.ru/forum - работает
http://VasheSoznanie.ru - работает
http://VasheSoznanie.ru/ - НЕ работает

Буду очень признателен если исправите!...

with-love-from-siberia 01.02.2011 13:16

попробуйте вот эту регулярку

/^(?:([a-z]+):(?:([a-z]*):)?\/\/)?(?:([^:@]*)(?::([^:@]*))?@)?((?:[a-z0-9_-]+\.)+[a-z]{2,}|localhost|(?:(?:[01]?\d\d?|2[0-4]\d|25[0-5])\.){3}(?:(?:[01]?\d\d?|2[0-4]\d|25[0-5])))(?::(\d+))?(?:([^:\?\#]+))?(?:\?([^\#]+))?(?:\#([^\s]+))?$/i


Работает для подавляющего большинства URI (интернет- и почтовые адреса, DSN, понимает имена доменов, IP-адреса)

Riim 01.02.2011 13:29

Цитата:

Сообщение от Mizuho
http://VasheSoznanie.ru/ - НЕ работает

работает. Флаг IgnoreCase ставить надо.

Mizuho 01.02.2011 13:47

with-love-from-siberia - спасибо, попробую, но пока хочу с этой разобраться

Цитата:

Сообщение от Riim (Сообщение 90666)
работает. Флаг IgnoreCase ставить надо.

Я и так ставлю и дело не в регистре, а в слеше в конце...

http://vashesoznanie.ru/forum - работает
http://vashesoznanie.ru/forum/ - НЕ работает
http://vashesoznanie.ru - работает
http://vashesoznanie.ru/ - НЕ работает

И кирилические домены не поддерживает.

Riim 04.02.2011 15:58

Mizuho,
у меня работает: http://realcode.ru/regexptester/?c5dc1b
выложи свой полный пример.

Цитата:

Сообщение от Mizuho
И кирилические домены не поддерживает.

это уже актуально, надо допиливать. Скорей всего достаточно будет добавить "а-я" ко всем "\w" и "a-z".

Mizuho 05.02.2011 14:38

RegExp.url = '(?:(?:ht|f)tps?://)?(?:[\-\w]+:[\-\w]+@)?(?:[0-9a-z][\-0-9a-z]*[0-9a-z]\.)+[a-z]{2,6}(?::\d{1,5})?(?:[?/\\#][?!^$.(){}:|=[\]+\-/\\*;&~#@,%\wА-Яа-я]*)?';
if(!(new RegExp('^'+RegExp.url+'$','i')).test('http://vashesoznanie.ru/forum')){ alert('http://vashesoznanie.ru/forum - работает');}
if(!(new RegExp('^'+RegExp.url+'$','i')).test('http://vashesoznanie.ru/forum/')){ alert('http://vashesoznanie.ru/forum/ - НЕ работает');}
if(!(new RegExp('^'+RegExp.url+'$','i')).test('http://vashesoznanie.ru')){ alert('http://vashesoznanie.ru - работает');}
if(!(new RegExp('^'+RegExp.url+'$','i')).test('http://vashesoznanie.ru/')){ alert('http://vashesoznanie.ru/ - НЕ работает');}

x-yuri 06.02.2011 08:01

надо прежде всего определиться с целью, иначе можно потеряться в трех соснах регулярных выражений ;)


Часовой пояс GMT +3, время: 10:56.