URL检查在浏览器中无限运行的正则表达式

时间:2015-10-07 06:43:52

标签: javascript regex

我正在使用以下正则表达式来检查网址是否有效

var re = /^(http[s]?:\/\/(www\.)?|ftp:\/\/(www\.)?|www\.){1}([0-9A-Za-z-\.@:%_+~#=]+)+((\.[a-zA-Z]{2,3})+)(/(.)*)?(\?(.)*)?/;
var is_valid = re.test(input_url);

它适用于小输入,但随着更大的输入开始无穷无尽。请考虑以下64个字符的输入

re.test("http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")

使用最新的Google Chrome运行时,在几分钟内无法完成此操作。

正则表达式有问题吗?

1 个答案:

答案 0 :(得分:1)

悬挂归于backtracking,正如马里亚诺在评论中提到的那样。具有多个量词(如*和+)的正则表达式可能会导致潜在匹配的可能排列太多,并且当字符串不匹配时,引擎会在尝试探索它们时永远挂起。

然而,除此之外,正则表达式存在多个问题,并且不适合用途。我建议你从之前关于这个主题的问题中选择一种方法:

Trying to Validate URL Using JavaScript

Javascript regular expression to validate URL

相关问题