2017-02-08 3 views
1

私は以下の正規表現を使用して電子メールを検証しています。 UIがフリーズに入力している。事前に感謝正規表現の正規表現、UIフリーズ

'^(?!.*([.+_-])\\1)((?:[a-zA-Z0-9]+[a-zA-Z0-9.+_-]*)*[a-zA-Z0-9])[email protected]((?:[a-zA-Z0-9]+[a-zA-Z0-9-]*)*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z][a-zA-Z0-9]*){2,63})+$' 
+0

http://regexr.com/で、これはこれは、 'aaa.abcする@ gmail.more_here.com'はすでにそれを引き起こし、致命的なバックトラックである電子メールのパターン – Laazo

+0

と一致していません。 –

+0

'?:[。:[a-zA-Z] [a-zA-Z0-9] *){2,63})+' –

答えて

0

これは、最初は必須であり、第二はオプションで定量化パターンの定量化されたグループによって引き起こされる壊滅的なバックトラックの場合です。

基本的に、あなたは

[a-zA-Z0-9][a-zA-Z0-9.+_-]*[a-zA-Z0-9] 

((?:[a-zA-Z0-9]+[a-zA-Z0-9.+_-]*)*[a-zA-Z0-9])+ 

を置き換えることができ、あなたのパターンは、コードの実行を凍結停止します。しかし、末尾の部分(?:\\.(?:[a-zA-Z][a-zA-Z0-9]*){2,63})+も奇妙に見えます。 の制限はここでは意味をなさないので、(?:\\.[a-zA-Z][a-zA-Z0-9]*)+に減らすことができます。

使用

'^(?!.*([.+_-])\\1)[a-zA-Z0-9][a-zA-Z0-9.+_-]*[a-zA-Z0-9]@[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9](?:\\.[a-zA-Z][a-zA-Z0-9]*)+$' 
+1

ありがとうございました迅速なソリューション。できます :) –