2015-05-25 4 views
0

Я проверяю значение, будь то электронная почта или нет, используя код ниже.RegExp слишком много проверяет адрес электронной почты

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("[email protected]"); 

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

Это займет почти 55 секунд. дать результат для ввода выше, и если я изменить его на

var a = getEmailId("[email protected]"); 

она занимает почти 3,5 сек, чтобы дать результат.

Я не могу понять это поведение.

Может кто-нибудь, пожалуйста, помогите мне понять это поведение и есть ли способ получить результат мгновенно.

+0

Почему вы делаете 'новый RegExp' на то, которое уже регулярное выражение? –

+1

@Hacketo Должно быть, среда специфична, у Safari нет проблем с ней. –

+0

никаких проблем с хром, а также –

ответ

1
^\w+[.\w-]*\[email protected]\w+[.\w-]*\w+(\.\w{2,3})+$ 

Вы можете просто использовать это, не встречая catastrophic backtracking.

See demo.

+0

привет, спасибо, Это тоже работает, но теперь я немного смущен, что лучше использовать, этот или stribizhev предложил^\ w + (?: [.-] \ w +) * @ \ w + (?: [ .-] \ w +) * (?: \. \ w {2,3}) + $ –

+0

@RajitGarg другой не будет принимать идентификаторы электронной почты, такие как 'abc.asd.-asd @ gami.com' – vks

+0

да вы абсолютно правильно, но есть ли какой-либо случай, который может быть неудачным с этим. Спасибо –

2

Когда вы передаете строку [email protected], двигатели регулярных выражений работают в catastrophic backtracking (see here).

Причина заключается в дополнительном [\.-]?, который фактически заставляет двигатель соответствовать \w+(\w+)*. Решение состоит в том, чтобы удалить это ?:

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

См demo

+0

Большое спасибо stribizhev, это работает, я проверил это для большинства случаев. –

+0

Мне нравится термин «катастрофический откат». –

+0

Просто FYI: см. [Эту ссылку] (http://www.regular-expressions.info/catastrophic.html) для получения дополнительной информации о «катастрофическом обратном следе». –

Смежные вопросы