我设置了一个自定义的正则表达式属性。我总是收到 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]*$");