2

az 0-9 \s .,- および \r \n のみを許可したいテキストエリアがあります。

JQuery サードパーティ プラグインを使用しています。これは私が検証ルールのために持っているものです:

        jQuery("#description").validate({
        expression: "if (VAL.match(/^[a-z0-9 ,.-]*$/gi)) return true; else return false;",
        message: "Only: a-z 0-9 period comma dash space"
    });

これは az 0-9 で正常に動作します ,.-

ただし、これらの sq.brackets 内に \r を追加すると、メッセージをスローしない検証を入力できますが、ユーザーは必要な任意の文字を入力して検証できます。メッセージは、必要に応じて、フォーカスがテキストエリアから離れたときに表示されます。

また、複数行に「m」フラグを追加しましたが、\r を追加しなかったため、同じ効果が得られました。

これについて1週間頭を悩ませていましたが、正規表現の学習を始めたばかりです。これを解決するために私がどの方向を見るべきか考えている人はいますか?

4

2 に答える 2

3
var string = "This is a\ntest";

string.match(/^[a-z\s]$/i); // ["This is a\ntest" ]
string.match(/^[a-z \r\n]+$/i); // ["This is a\ntest" ]

mどうやら必要ありません。たぶん、エスケープ文字を二重にエスケープする必要がありますか? 何らかの処理が行われている可能性があるようです。そう:

string.match(/^[a-z \\r\\n]+$/i);

\sスペース、改行、改行、タブ ( \t)が含まれていることに注意してください。

于 2013-03-04T17:39:54.460 に答える
1

あなたの問題は「-」文字に関連していると思います。文字セット( "[xyx]")内では、ダッシュは数少ない特殊文字の1つです。2文字の間に入ると、範囲を設定します。片側だけの文字の場合は、単にダッシュ文字として扱われます。

最初の正規表現では、ダッシュ(/^[a-z0-9 ,.-]*$/gi)で終わるため、ダッシュ文字として扱われます。

2番目の(/^[a-z0-9 ,.-\r]*$/gi)では、\ rで終わり、次の小さなサブ範囲を作成します。.-\r

ダッシュをセットの最後(または最初)に移動するか、エスケープすることで、これを修正できるはずです。

/^[a-z0-9 ,.\r-]*$/gi

。。。また 。。。

/^[a-z0-9 ,.\-\r]*$/gi

于 2013-03-04T18:02:51.437 に答える