1

次のように、EFメタデータでRegularExpressionAttributeを使用します。

[RegularExpression("[A-Z]+")]
public string Code { get; set; }

そして、フィールドのどこにでも AZ 以外を正しく入力することはできません。

他の場所では、コードで同じ reg 式を使用したいので、次のように Regex に変更しました。

var regex = new Regex("[A-Z]+");
Console.WriteLine(regex.IsMatch("B")); //true
Console.WriteLine(regex.IsMatch("1")); //false
Console.WriteLine(regex.IsMatch("A1")); //true - why?

また、 RegexStringValidatorは Regex と同じように機能します。

私は何を間違っていますか?

4

3 に答える 3

4
var regex = new Regex("[A-Z]+");
Console.WriteLine(regex.IsMatch("A1")); //true - why?

その正規表現は、1 つ以上の大文字のラテン文字に一致することを示しています。また、" A1" には大文字のラテン文字が含まれています。

デフォルトでは、正規表現は文字列のどこにでも一致します。文字列全体を一致させるには、文字列アンカーの開始 " ^"で開始し、文字列アンカーの終了 " $"で終了します

 var regex = new Regex("^[A-Z]+$");
 Console.WriteLine(regex.IsMatch("A1")); 

表示されfalseます。

( .NET 正規表現には一連のアンカーがあります。)

于 2012-07-25T14:01:51.897 に答える
1

おそらくあなたはこれが欲しい:

"^[A-Z]+$"

"[A-Z]+"文字列内のどの位置にあるかに関係なく、1 つ以上の文字に一致します。

于 2012-07-25T14:00:19.420 に答える
0

正規表現を固定する必要があります

"^[A-Z]$"
于 2012-07-25T14:00:20.533 に答える