0

この正規表現が希望どおりに機能しない理由がわかりません。「Test123#%&*-Test」のようなものを許可したい

[RegularExpression("[^a-zA-Z0-9/#%&*\\- ]")]

MSDNのドキュメントには1つの例しかありません...

[RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$")]

MSDNの例のように、入力を特定の文字の長さに制限したくありません。この正規表現パターンをRegex.netのオブジェクトで使用しましたが、問題なく機能します。なぜDataAnnotations動作が異なるのでしょうか?

4

2 に答える 2

1

否定されたクラスを使用して許可されていない文字を見つける方法は間違っていると思います。それを証明するドキュメントは見つかりませんが、私には論理的に思えます。

許可された入力に一致するパターンを与える必要があると思います。

試す

[RegularExpression("^[a-zA-Z0-9/#%&*\\- ]*$")]

量指定子は*、文字クラスを 0 回以上繰り返させます。これにより、空の文字列も許可されます! 空の文字列を使用したくない場合は、 quantifier+を使用します。これは 1 つ以上になります。

*のショートカットです{0,}。2 番目の数字を省略すると、最大一致がないことを意味します

+のショートカットです{1,}

于 2013-02-28T20:47:00.533 に答える
0

Regex DataAnnotations は、無効なものを見つけるのではなく、有効なものを見つける方法で記述されています。有効な値と一致させたい。

MSDN リンク

にんじんを落とします(^)。これにより、指定した個々の文字を検証できます。何かが失敗すると、エラー メッセージが生成されます。

于 2013-02-28T20:21:46.150 に答える