помогите с regexp проверки урла

denw

Новичок
помогите с regexp проверки урла

Нашел я регулярное выражение для проверки урла
PHP:
if(!eregi("^(http|https)\://[a-z0-9\-\.]+\.[a-z]{2,4}(:[a-z0-9]*)?/?([a-z0-9\-\._\?\,/\\\+&amp;%\$#\=~])*[^\.\,\)\(\s]$",$url)) {die ("<center>Bad format of URL.</center>");}
Это регулярное выражение почему то не пропускает урл с "тире" типа http://bla-bla.com
, но пропускает урлы с кавычками и | ,вроде http://blabla.com?id=1'|

подскажите как убрать эти недостатки
 

denw

Новичок
может кто нибуть укажет где взять хороший regexp для проверки урла
 

nerezus

Вселенский отказник
Пардон, это я из базы регекспов вытащил )
И все-таки лучше, чтобы были лишние результаты, чем не хватало не лишних.


Вот немного поправил: (https?|ftp|file)://[-\w0-9+&@#/%?=~_|!:,.;]*[-\w0-9+&@#/%=~_|]
 

antivir

Новичок
вот мой вариант:

PHP:
//--------------------------------------------------------------------
//	Проверяет строку на соответствие URL адресу
//	возвращает true в случае если ввод корректен
//	false в противном случае
//--------------------------------------------------------------------
function is_url($in){
	$w = "a-z0-9";
	$url_pattern = "#(
	(?:f|ht)tps?://(?:www.)?
	(?:[$w\\-.]+/?\\.[a-z]{2,4})/?
	(?:[$w\\-./\\#]+)?
	(?:\\?[^\s]+)?
	)#xi";
	
	return preg_match($url_pattern,$in);
}
 

Sender

Новичок
Wicked
читаем ман:

$ php -r 'print_r(parse_url("http://invalid_host..name/"));'
Array
(
[scheme] => http
[host] => invalid_host..name
[path] => /
)


то есть if(false === @parse_url('http://invalid_host..name/')) {die ("<center>Bad format of URL.</center>");} не выдаст нужный результат
 

Wicked

Новичок
Sender
Ты практически открыл мне глаза. Обрати внимание на смайлик в конце моего сообщения. Хотя, в каждой шутке есть доля правды, и человек с фантазией догадался бы потом довалидировать отдельные части.

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

А если бы я делал для себя, и мне потребовалась бы максимальная достоверность, я бы обратился к rfc #1738. Все остальное - от лукавого.
 

Sender

Новичок
Wicked
ой извините глупого :) который ставит смайлики в конце каждого удачного решения задачи :)
 
Сверху