RegExp在检查emailid时花费太多

时间:2015-05-25 08:14:51

标签: javascript regex node.js email-validation

我正在使用以下代码检查值,无论是否为emailid。

function getEmailId(inputTxt){
    var email = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
    return new RegExp(email).test(inputTxt);
}


var sTime = new Date();
var a = getEmailId("kuldeep.sharma@daffodilsw.com-daffodilsw");

console.log("value>>>>"+a+">>>time>>>>"+(new Date()-sTime));

大约需要55秒。为上面的输入提供结果,如果我将其更改为

var a = getEmailId("rajit.garg@daffodilsw.com-daffodilsw");

给出结果需要将近3.5秒。

我无法理解这种行为。

任何人都可以帮助我理解这种行为,有没有办法立即获得结果。

2 个答案:

答案 0 :(得分:2)

当您传递kuldeep.sharma@daffodilsw.com-daffodilsw字符串时,正则表达式引擎会运行到catastrophic backtrackingsee here)。

原因是可选的[\.-]?实际上使引擎匹配\w+(\w+)*。解决方案是删除此?

^\w+(?:[.-]\w+)*@\w+(?:[.-]\w+)*(?:\.\w{2,3})+$

请参阅demo

答案 1 :(得分:1)

catastrophic backtracking

您只需使用此功能而不会遇到mvn -version

See demo.