查询字符串URL的Javascript URL验证失败

Javascript URL Validation failing for query string urls

本文关键字:URL 验证 失败 Javascript 字符串 查询      更新时间:2023-09-26

我使用以下函数来验证url,但它无法验证url与查询字符串,例如…http://www.example.com/sample/?id=39949&affid=4994

function checkURL(value) {
    var urlregex = new RegExp("^(http|https|ftp)'://([a-zA-Z0-9'.'-]+(':[a-zA-Z0-9'.&%'$'-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])'.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)'.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)'.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9'-]+'.)*[a-zA-Z0-9'-]+'.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(':[0-9]+)*(/($|[a-zA-Z0-9'.','?'''''+&%'$#'=~_'-]+))*$");
    if (urlregex.test(value)) {
        return (true);
    }
    return (false);
}

请帮忙解决这个问题。由于

从评论来看,问题是顶级域名不匹配。因此,为了扩展域匹配的规则,您可以在末尾添加|[a-zA-Z]{2,3}而不是|[a-zA-Z]{2},这意味着需要在末尾添加2或3个alpha字符。或者为了完全消除顶级域检查,将所有com|edu|gov|int|等匹配更改为简单的[a-zA-Z]+,这是任何α字符一次或多次

如下

匹配arpa|info|name|aero|coop|museum或任何2或3个字母的域(删除2或3个字母的域,因为不需要它们):

function checkURL(value) {
    var urlregex = new RegExp("^(http|https|ftp)'://([a-zA-Z0-9'.'-]+(':[a-zA-Z0-9'.&%'$'-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])'.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)'.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)'.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9'-]+'.)*[a-zA-Z0-9'-]+'.(arpa|info|name|aero|coop|museum|[a-zA-Z]{2,3}))(':[0-9]+)*(/($|[a-zA-Z0-9'.','?'''''+&%'$#'=~_'-]+))*$");        
    return urlregex.test(value);
}

或匹配任何alpha字符域(一次或多次):

function checkURL(value) {
    var urlregex = new RegExp("^(http|https|ftp)'://([a-zA-Z0-9'.'-]+(':[a-zA-Z0-9'.&%'$'-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])'.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)'.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)'.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9'-]+'.)*[a-zA-Z0-9'-]+'.[a-zA-Z]+)(':[0-9]+)*(/($|[a-zA-Z0-9'.','?'''''+&%'$#'=~_'-]+))*$");        
    return urlregex.test(value);
}