1

javascriptに次の正規表現があります

var reg = new RegExp("^[(]?[2-9]\d{2}[)]?[\-. :]?[2-9]\d{2}[\-. :]?\d{4}$");
return this.optional(element) || (reg.test(value));

私のコードでは、reg.test(value)は、正しい値(たとえば、222 222 2222または222-222-2222)でもfalseを返します。すべての正規表現テスター(特に、同じメソッドを呼び出すこの正規表現)は、正規表現が式と一致することを示しています。何が問題になる可能性がありますか?

4

4 に答える 4

8

これを試して:

var reg = /^[(]?[2-9]\d{2}[)]?[\-. :]?[2-9]\d{2}[\-. :]?\d{4}$/;
return this.optional(element) || (reg.test(value));

またはまた:

var reg = new RegExp("^[(]?[2-9]\\d{2}[)]?[\\-. :]?[2-9]\\d{2}[\\-. :]?\\d{4}$");
return this.optional(element) || (reg.test(value));
于 2012-06-01T21:26:06.253 に答える
4

sは\文字列リテラルに飲み込まれています。

代わりに正規表現リテラルを使用する必要があります。

var reg = /^[(]?[2-9]\d{2}[)]?[\-. :]?[2-9]\d{2}[\-. :]?\d{4}$/;
于 2012-06-01T21:25:56.270 に答える
2

問題の潜在的な原因が1つあります。関数を使用して新しい正規表現を作成する場合、RegExpバックスラッシュを2回エスケープする必要があります。1回はJavaScriptエンジン用、もう1回はRegExエンジン用です。

これが問題を引き起こしているかどうかをテストするには、

var reg = /^[(]?[2-9]\d{2}[)]?[\-. :]?[2-9]\d{2}[\-. :]?\d{4}$/;
于 2012-06-01T21:26:51.600 に答える
1

正規表現を文字列として取り込んでいるので、のすべての出現は\d\\d正規表現文字列がインタプリタに送信されるときに文字がaおよびa\dとして解釈されないためですが、余分なスラッシュを追加するだけで他のスラッシュがエスケープされるため、 aおよびaとして解釈されます。また、もう1つの変更を提案します。文字クラスには、1つの文字しか含まれておらず、したがって意味がないため、を置き換える必要があります。\dd\\d\d[(]\\(

于 2012-06-01T23:44:13.943 に答える