2017-02-08 14 views
1

私はRegExpを使用して、単一のメールアドレスを検証しています。それは,(カンマ)を検証するものではありません。続き電子メールRegexがコンマを間違って受け入れる

は私の正規表現です:

^[-a-zA-Z0-9~!$%^&*_=+}{\'?]+(\.[-a-zA-Z0-9~!$%^&*_=+}{\'?]+)*@([a-zA-Z0-9_][-a-zA-Z0-9_]*(\.[-a-zA-Z0-9_]+)*\.([a-zA-Z]{2,})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$

regex101で期待どおりにまた働きます。

予想される出力:

私の正規表現が間違っているか、他のいくつかの問題がありますか?私はあなたがあなたの正規表現をエスケープしていないと思います

var regex = new RegExp("^[-a-zA-Z0-9~!$%^&*_=+}{\'?]+(\.[-a-zA-Z0-9~!$%^&*_=+}{\'?]+)*@([a-zA-Z0-9_][-a-zA-Z0-9_]*(\.[-a-zA-Z0-9_]+)*\.([a-zA-Z]{2,})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$"); 
 

 
console.log(regex.test("[email protected]")) 
 
console.log(regex.test("[email protected],test"))

答えて

3

は、ここに私のスニペットです。ただ、\\\を置き換える:

var regex = new RegExp("^[-a-zA-Z0-9~!$%^&*_=+}{\\'?]+(\\.[-a-zA-Z0-9~!$%^&*_=+}{\\'?]+)*@([a-zA-Z0-9_][-a-zA-Z0-9_]*(\\.[-a-zA-Z0-9_]+)*\\.([a-zA-Z]{2,})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,5})?$"); 
 

 
console.log(regex.test("[email protected]")) 
 
console.log(regex.test("[email protected],test"))

\.は、メモリストリングが生じ内側、ちょうど.になります。そしてそれは真の点だけではなく、どんなcharもマッチしていることを意味します。したがって、2回エスケープする必要があります.1つは文字列エンコーディング、もう1つは正規表現エスケープシーケンスです。

Regex101では、正規表現のJavaScript表現ではなく、正規表現を記述します。したがって、JavaScriptに必要なエスケープ処理は必要ありません。

+0

ありがとう!私はなぜそれがコンマを受け入れるように逃げていないのか知りたい。 – tanmay

+1

あるいは 'var regex =/ /;'構文を使って 'regex'を作成すると、' \\ 'をエスケープする必要はありません。しかし、両方の仕事 –

+0

また、なぜregex101で働いていたのですか? – tanmay

1

type="email"で使用されている正規表現を使用した例を示します。W3CからEmail Address Regular Expression That 99.99%Worksへのリンクです。

コード例:

var regex = /^(([^<>()\[\]\\.,;:\[email protected]"]+(\.[^<>()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 
 

 
console.log(regex.test('[email protected]')); 
 
console.log(regex.test('[email protected],test'));

関連する問題