Проверка правильности URL-адресов

i сделал следующее:

 /^(http[s]?://){0,1}(www.){0,1}[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,5}[\.]{0,1}

и проверил его с помощью валидатора, но на моей странице он не работает:

var re = /^(http[s]?://){0,1}(www.){0,1}[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,5}[\.]{0,1};
if (!re.test(url)) { 
    alert("url error");
    return false;
}

я получаю эту ошибку

Webpage error details

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
Timestamp: Tue, 30 Nov 2010 14:23:10 UTC


Message: Expected ')' in regular expression
Line: 781
Char: 23
Code: 0
URI: http://*************************

Ответ 1

В этом случае вам нужно избежать специальных символов (/ и . после www) и установить отсутствующий конечный /, например:

var re = /^(http[s]?:\/\/){0,1}(www\.){0,1}[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,5}[\.]{0,1}/;
if (!re.test(url)) { 
    alert("url error");
    return false;
}

Ответ 2

Я отправлю сообщение, хотя вопрос был принят.

Это регулярное выражение все еще неполное.

http://www.-1-.de не является допустимым именем домена, но будет проходить ваш тест.

Вот что я использую:

~^
(?:ht|f)tps?://

(?:[a-z0-9] (?:[a-z0-9-]*[a-z0-9])?      \.)*

(?:[a-z0-9][a-z0-9-]{0,62}[a-z0-9])
(?:\.[a-z]{2,5}){1,2}

$~ix

Обложки http (s), ftp (s) и .co.uk TLD и тому подобное. Также охватывает субдомены, длина которых может быть 1 символа (m.example.com для мобильных версий веб-страниц), но не позволяет m-.example.com.

Несомненно, некоторые могут возражать в отношении полноты регулярного выражения, поскольку .pro TLD требуют не менее 4 символов в качестве имени домена.; -)

Кроме того, имена доменов IDN будут передавать мое регулярное выражение после преобразования (т.е. в формате "xn--" ).

Ответ 3

На всякий случай вы хотите узнать, действительно ли существует URL:

function url_exist($url){//se passar a URL existe
    $c=curl_init();
    curl_setopt($c,CURLOPT_URL,$url);
    curl_setopt($c,CURLOPT_HEADER,1);//get the header
    curl_setopt($c,CURLOPT_NOBODY,1);//and *only* get the header
    curl_setopt($c,CURLOPT_RETURNTRANSFER,1);//get the response as a string from curl_exec(), rather than echoing it
    curl_setopt($c,CURLOPT_FRESH_CONNECT,1);//don't use a cached version of the url
    if(!curl_exec($c)){
        //echo $url.' inexists';
        return false;
    }else{
        //echo $url.' exists';
        return true;
    }
    //$httpcode=curl_getinfo($c,CURLINFO_HTTP_CODE);
    //return ($httpcode<400);
}

Ответ 4

Как сказал Ник, вам нужно избегать \ и ., если вы не используете другой разделитель, чтобы ваше регулярное выражение стало следующим:

var re = '~(https?)://)?(www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,5}\.?~';

Но имейте в виду, что ваше регулярное выражение будет соответствовать URL-адресу, например:

http://....aa.

Ответ 5

После длительного исследования я создаю это выражение reg. Я надеюсь, что это тоже поможет другим людям.

   url = 'https://google.co.in';
   var re = /[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/;
  if (!re.test(url)) { 
     alert("url error");
   return false;
 }else{
 alert('success')
 }

Ответ 6

var regForUrl = /(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;

if (!regForUrl.test(url)) {
    alert('Invalid URL-- missing "http://" or "https://"');
}