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

时间:2013-11-05 14:14:00

标签: c# regex asp.net-mvc asp.net-mvc-4

我设置了自定义的正则表达式属性。我总是得到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的所有情况

1 个答案:

答案 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]*$");