我设置了自定义的正则表达式属性。我总是得到errpr消息,在这种情况下测试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的所有情况答案 0 :(得分:0)
以下正则表达式字符串将使IsValid
返回false
,以查找字符串中包含1,2或3的字符串:
@"[^123]*"
E.g。
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]*$");