【问题标题】:JQuery validation url validation goes in infinite loopJQuery 验证 url 验证进入无限循环
【发布时间】:2014-03-01 18:11:29
【问题描述】:

我正在使用以下代码来验证 URL:

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 (true === urlregex.test(textval.trim())) {
    return true;
}
return false

当我给出一个长 url(超过 200 个字符)时,它会进入无限循环并终止我的网页,并给出消息“以下页面已变得无响应,您可以等到它响应或终止”

【问题讨论】:

  • 它根本没有连接到 jQuery。这是关于纯 JS 的。
  • 谢谢 :) 移除 jQuery 标签
  • & 在字符类中?看起来很腥。
  • 没问题:) 我认为这里唯一的选择是使用更简单的正则表达式。我不确定是否真的需要如此准确地检查 JavaScript。
  • 是的,所以您可以忽略这种情况或编写一个不会导致指数回溯的新正则表达式,对吧?编写该正则表达式的人并不真正知道他们在做什么,所以我很怀疑尝试解决这个问题是否是个好主意(而不是使用适当的 URL 验证器,这很可能 not 一个正则表达式)。

标签: javascript regex


【解决方案1】:

这个:

if (condition === true) {
    return true;
} else {
    return false;
}

是一种反模式。使用

return (condition === true);

除此之外,不要使用自己的正则表达式进行 URL 匹配,而是使用 a tried-and-tested one

var urlregex = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/i;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2020-12-25
    • 2019-07-31
    • 2015-07-07
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多