C# 中的自定义正则表达式属性



我设置了一个自定义的正则表达式属性。我总是收到 errpr 消息,在本例中为 test 123。名称的有效字符将是 ABC 而不是 ABC1 或 ABC13 ...

[Test(ErrorMessage="test 123")]
public string Name { get; set; }

我的属性类是:

public class TestAttribute : RegularExpressionAttribute
{
public TestAttribute() : base(GetRegex())
{  }
private static string GetRegex()
{
return @"[123]$";
}
}

为什么它不起作用?

我正在使用带有Visual Studio 2010和Framework 4的MVC 4

只是为了清楚。 在我保存表单时在摘要中看到的所有情况下验证消息 test123

以下正则表达式字符串将使字符串中任何位置包含 1、2 或 3 的字符串返回IsValid false

@"[^123]*"

例如

var r = new RegularExpressionAttribute(@"[^123]*");
Console.WriteLine(r.IsValid("ABC3DEF")); // false
Console.WriteLine(r.IsValid("ABC4DEF")); // true
Console.WriteLine(r.IsValid("ABC")); // true
Console.WriteLine(r.IsValid("ABC1")); // false
Console.WriteLine(r.IsValid("ABC123")); // false

与某些正则表达式匹配不同,RegularExpressionAttribute似乎检查提供的正则表达式是否与整个字符串匹配,而不仅仅是一部分。这就是为什么您在 rubular 上测试图案时看到的内容可能与您在此处看到的不同。就像它会自动将^$放在您的图案周围。例如,这返回的值与我的示例中的输入r.IsValid相同的值:

Regex.IsMatch("ABC3DEF", @"^[^123]*$");

最新更新