【问题标题】:URL regex validationURL 正则表达式验证
【发布时间】:2021-02-24 23:14:34
【问题描述】:

我做到了:

 /^(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://*************************

【问题讨论】:

  • 你使用了什么验证器?它是特定于 JS 的吗?请记住,正则表达式因环境而异。
  • 我用过js一个。。。不知道怎么回事

标签: javascript regex


【解决方案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;
}

【讨论】:

  • http://localhost:8000/memcache?message=Cache+flushed%2C+all+keys+dropped. 有什么问题?
【解决方案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}\.?~';
    

    但请注意,您的正则表达式将匹配以下网址:

    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://"');
        }
        

        【讨论】:

        • 这里的一些解释可能会有所帮助。