0

是否可以在用户在文本框中输入有效的格式 url 时检查它?

url 格式可以是:

barfly.com
http://barfly.com
https://barfly.com
www.barfly.com

重要的是要避免 tld(后缀)是真实的:http: //barfly.boo

将定期重新访问脚本以考虑流行的新顶级域名(如 .tv、.mobi、.firm.in 等...

到目前为止,我的代码允许部分匹配,例如:

www.barf  
http://www.barf

我必须匹配整个 URL,而不仅仅是其中的一部分

到目前为止,我的代码是:

    $('#txtbxhost').live('input', function() {

    var inp = $("#txtbxhost").val();
    var urlregex = new RegExp("^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.){1}([0-9A-Za-z]+\.([a-z]+\.))");

    if ( urlregex.test(inp) ) 
    {
    // keep showing ok label
    } 
    else {
    // hide ok label
    }   
    })
4

1 回答 1

1

首先,$.live自 jQuery 1.7 起已弃用,因此如果您使用的是 1.7 或更高版本,请$.on改用。

要获得更好的 URL 正则表达式,请尝试以下方法之一:http: //mathiasbynens.be/demo/url-regex。您不妨使用 diegoperini 的,因为它是最准确的:

_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$_iuS

不过,这对于您要尝试做的事情来说可能有点过头了。只需选择一个您认为可以涵盖大部分用例的应用程序。

于 2013-06-13T18:49:58.037 回答