Проверка регулярных выражений URL

#javascript #html #jquery #forms #validation

#javascript #регулярное выражение

Вопрос:

я сделал это:

  /^(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. Какой валидатор вы использовали? Было ли это специфично для JS? Имейте в виду, что регулярные выражения различаются в зависимости от среды.

2. я использовал js one … я не знаю, что было не так

Ответ №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;
}
  

Комментарии:

1. что не так http://localhost:8000/memcache?message=Cache flushed, all keys dropped. ?

2. причина, функция предназначена только для доменов и IP-адресов без ПОРТА.

Ответ №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 (ы), ftp (ы) и .co.uk ДВУ и тому подобное. Также охватывает поддомены, длина которых может составлять 1 символ ( m.example.com для мобильных версий веб-страниц), но не позволяет m-.example.com .

Конечно, некоторые могут возразить против полноты регулярного выражения, поскольку для .pro TLD требуется не менее 4 символов в качестве имени домена. 😉

Кроме того, доменные имена IDN будут передаваться моему регулярному выражению только после преобразования (т. Е. В формате «xn —«).

Комментарии:

1. как бы я это использовал?

Ответ №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#!:.? =amp;%@!-/]))?/;

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

Комментарии:

1. Здесь может быть полезно некоторое объяснение.