我有一個奇怪的問題與我們的電子郵件地址的正則表達式發生。這裏是表達:在Ruby和Javascript中正則表達式崩潰
^(\w)+(([(\.?)\w\-+])*[\w]+)*@((\[([\d]{1,3}\.){3}[\d]{1,3}\])|((\w)+((\.?)[\w\-]+)*\.[a-z]{2,6}))$
任何事情,我們已經在它相匹配的精美拋出,問題是與失敗,長串導致表達掛起。在我們的網絡服務器上,它會激增CPU。一些例子如下。問題是當人們錯誤地輸入很長的電子郵件地址時,它會使服務器崩潰。
這是一個失敗的工程。
rubular failure 1[email protected]
這是一種故障導致掛了,你可以看到rubular有問題也是如此。
rubular failure 2[email protected]
有趣的是,如果你要對它進行適當:
這很容易通過。
編輯:一個筆記,我也試圖運行這個使用客戶端JavaScript測試,它會失敗/成功以相同的方式。關於這個正則表達式會導致解析器吃掉內存並失敗,我只是不確定它是什麼部分。
這是關於這個一般性的主題一個有趣的閱讀。 http://www.regular-expressions.info/email.html – Ryanmt
如果你不能排除你的字符串包含換行符,你應該使用'\ A'和'\ z'而不是'^'和'$' 。 –