我用正則表達式時用於自定義驗證有問題。JavaScript的正則表達式評估導致瀏覽器掛起
我有這個不顯眼的方法:
jQuery.validator.addMethod("isRegex", function (value, element, params) {
if (value.length < 1) return true;
var re = new RegExp(params.regex);
var match = re.exec(value);
return match;
});
起初我用這個正則表達式驗證電子郵件表單字段:
^\w+([-+.]*[\w-]+)*@(\w+([-.]?\w+)){1,}\.\w{2,4}$
該事件將被解僱「的onkeyup」,並在第一它會工作,但如果電子郵件地址太長,會導致瀏覽器掛起,唯一的恢復方式是重新啓動瀏覽器。這發生在IE和Chrome上,但也可能是Firefox。
因此,例如鍵入「[email protected]」將工作正常。 「[email protected]」也可以毫無問題地工作,但「[email protected]」會掛在最後的字母上。
起初我想,也許正則表達式是一個inneficient一個導致無限循環或鎖,所以我把它改爲簡單的東西:
^[email protected]+\..+$
部分成功,我可以輸入較長的電子郵件地址,但它仍然掛起最終。
然後我想我應該禁用onkeyup事件,也許只是驗證的模糊和我使用的:
$("#divEmail input[data-val-fieldregex]").keyup(function() { return false; });
現在KEYUP被禁止,但瀏覽器掛起模糊,所以這意味着代碼:
var re = new RegExp(params.regex);
var match = re.exec(value);
必須無法處理較大的值。
任何想法?
http://www.regular-expressions.info/catastrophic.html – Bergi