1

我目前正在使用此代码来验证 URL,但由于我正在验证页面中突出显示的文本,因此对于 javascript 函数来说真的很慢。

这是我正在使用的代码:

    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\.\,\?\'\\\+&%\$#\=~_\-]+))*$");
return urlregex.test($.trim(url));

我希望还有其他方法可以用来检查使用 javascript 的有效链接。

谢谢。

4

2 回答 2

1

使用expr = new RegExp("pattern")与. 相比要慢得多expr = /pattern/g。您还应该确保在函数定义之外编译表达式,以便在每次调用函数时都可以重用它而无需编译(如果它在循环内则更重要)。尝试以下操作:

var expression = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/i;
function testUrl(url){
    return expression.test($.trim(url));
}

您可以在此处查看有关 javascript 正则表达式性能的更多信息:http: //corporate.tuenti.com/en/dev/blog/tips-and-tricks-with-regular-expressions-in-js

于 2012-09-20T11:49:32.203 回答
-1

尝试以下正则表达式:

var url1 = /(^|<|\s)(www\..+?\..+?)(\s|>|$)/g;
var url2 = /(^|<|\s)(((https?|ftp):\/\/|mailto:).+?)(\s|>|$)/g;
于 2012-09-20T11:41:39.637 回答