jqueryバリデーターを検証に使用しました。私は(gmail.com、yahoo.com)のような50無料の電子メールを持っているので、私はそれを検証する必要があります。私は配列を選択し、配列内のすべての電子メールを格納します。下に私は正規表現を使用して見ることができる私のコードを参照してください。正規表現の変数ですが、それは私のために働いていません。これは、このようなエラーを投げた SyntaxError:文字クラスの無効な範囲
私のコード
$.validator.addMethod("nofreeemail", function (value) {
var emails = ["gmail.com","yahoo.com","hotmail.com"]
$.each(emails,function(i, val){
console.log("email", val)
var regex = new RegExp("/^([w-.]+@(?!"+val+")([w-]+.)+[w-]{2,4})?$/");
console.log("regex", regex)
return regex.test(value);
});
}, "Free email addresses are not allowed.");
回答:
回答№1は2ここでは何が起きているのかは明らかではないので、私は答えを掲示するだろうが、根底にある理由はかなり共通している。
正規表現を定義するコンストラクタの表記法を使用しています。変数を使用してパターンを動的に構築する必要がある場合は、正しいアプローチです。ただし、リテラルのバックスラッシュは、次のように記述する必要があります。 "\"
。すべての単一のバックスラッシュが削除されます。したがって、あなたは [w-.]
になる [w-.]
それは無効な文字クラスです。また、正規表現の区切り文字( /..../
パターンの周りにある文字列を実際にコンストラクタの表記法で使用しないでください。 /
.
また、あなたの emails
単語以外の文字が含まれていて、それらをエスケープする必要があります。
つかいます
var regex = new RegExp("^([\w-.]+@(?!"+val.replace(/[-/\^$*+?.()|[]{}]/g,"\$&")+")([\w-]+\.)+[\w-]{2,4})?$");
私はまた、 ([w-]+.)+
エスケープする必要があります。リテラルドットと一致するはずです。