所以我寫了這個正則表達式驗證電子郵件地址:JS正則表達式凍結我的瀏覽器(S)
(?=^([A-Za-z\xC0-\xFF0-9\!\#\$\%\&\'\*\+\-\/\=\?\^\\_\`\{\|\}\~]\.?){0,63}[A-Za-z\xC0-\xFF0-9\!\#\$\%\&\'\*\+\-\/\=\?\^\\_\`\{\|\}\~]@[A-Za-z\xC0-\xFF0-9]([A-Za-z\xC0-\xFF0-9-]{0,61}[A-Za-z\xC0-\xFF0-9])?(\.[A-Za-z\xC0-\xFF]([A-Za-z\xC0-\xFF0-9-]{0,61}[A-Za-z\xC0-\xFF0-9])?)*$)(?=^.{3,254}$)
,我想測試它在JS控制檯:
var patt = new RegExp("(?=^([A-Za-z\xC0-\xFF0-9\!\#\$\%\&\'\*\+\-\/\=\?\^\\_\`\{\|\}\~]\.?){0,63}[A-Za-z\xC0-\xFF0-9\!\#\$\%\&\'\*\+\-\/\=\?\^\\_\`\{\|\}\~]@[A-Za-z\xC0-\xFF0-9]([A-Za-z\xC0-\xFF0-9-]{0,61}[A-Za-z\xC0-\xFF0-9])?(\.[A-Za-z\xC0-\xFF]([A-Za-z\xC0-\xFF0-9-]{0,61}[A-Za-z\xC0-\xFF0-9])?)*$)(?=^.{3,254}$)")
patt.test("[email protected]in.domain.domain.domain.domain.domain.domain.domain.domain.domain.domain.domain.domain.domain.domain.domain.domain.domain.domain.domain.domain.domain.domain.domain.domain.domain.domain.domai")
即可以凍結我的標籤。較短的地址似乎工作正常。
使用C#和在線正則表達式工具(例如regex101.com)進行測試沒有任何問題。 發生了什麼事? JavaScript Regex引擎是否發生故障,還是僅僅是我的Regex?
(我知道這可能不是一個完美的電子郵件驗證,但這個問題是關於爲什麼沒有工作)
使用正則表達式的文字語法,而不是正則表達式的構造後,它將支持。 – Pointy
http://www.regular-expressions.info/catastrophic。html – Dalorzo
問題的災難性回溯來自'(\。[A-Za-z \ xC0- \ xFF]?)*' - 似乎'?'(以及前一個'?')應該是'+'。 – Ryan