0

ASP.NET MVC 4 でデータ注釈を使用してモデル オブジェクトの検証を作成する必要があります。要件は、すべてのアルファベット、数字、および以下の文字を許可することです。

@'!&(){}:;,[].+?/-

他のすべての特殊文字は検証エラーになるはずです。私は以下のコードを持っています

[RegularExpression(@"^[a-zA-Z0-9 @'!&(){}:;,\[\].+?/-]+", ErrorMessage = NameIsNotValid)] 
public string Name { get; set; }

このコードは、文字列 "TEST NAME |||" の検証例外をスローしません。

しかし、コードを次のように変更すると

[RegularExpression(@"^[a-zA-Z0-9 '!&(){}:;,\[\].+?/-]+", ErrorMessage = NameIsNotValid)] 
    public string Name { get; set; }

正規表現から 1 文字 (@ または -) を削除すると、検証が適切に行われます。再び文字を追加しますが、検証エラーはスローされません

今、私は立ち往生しています.何をすべきかわからない..アドバイスしてください

4

1 に答える 1

0

これは通常の c# でしかテストできませんが、正規表現には次の 2 つの問題があります。

  1. end anchor を使用しないため$、名前が有効な文字で始まるとすぐに、検証は常に true になる必要があります。

  2. a-zA-ZASCII 文字のみです。これを、任意の言語の任意の文字に一致するUnicode character プロパティ に置き換えます。\p{L}

だから、試してみてください

[RegularExpression(@"^[\p{L}0-9 @'!&(){}:;,\[\].+?/-]+$", ErrorMessage = NameIsNotValid)] 
public string Name { get; set; }
于 2013-02-21T09:21:47.223 に答える