web-dev-qa-db-ja.com

javascriptの文字クラスの範囲外の範囲

私の正規表現が間違っているのでわかりません:

_var domain = "google\.com\.br";
var reEmail = new RegExp("^([A-Za-z0-9_\-\.])+\@" + domain + "$");
_

メールを検証するためにこれが必要です。例:reEmail.test("[email protected]");

私はこのエラーを受け取ります:

文字クラスの範囲外

31
Wilker Iceri

文字列を使用してRegExpを作成するため、_\-\._-.になり、それは無効な範囲です。 (それは_から.の範囲であり、正しくありません)

あなたはダブルエスケープする必要があります:

new RegExp("^([A-Za-z0-9_\\-\\.])+@" + domain + "$");

こうすると、\\は文字列で\になり、RegExpで-をエスケープするために使用されます。

編集:

文字列でRegExpを作成する場合は、結果をログに記録して、すべてを正しく行ったかどうかを確認することが常に役立ちます。

例えばRegExpの一部

console.log("^([A-Za-z0-9_\-\.])+\@");

結果:

^([A-Za-z0-9_-.])+@
71
t.niese