-2

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

为什么它不工作?

我将 MVC 4 与 Visual Studio 2010 和 Framework 4 一起使用

只是要清楚。在所有情况下,当我保存表单时,我在 summaryvalidation 中看到消息 test123

4

1 回答 1

0

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

@"[^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上测试模式时看到的可能与您在此处看到的不同。就像它会自动将^and放在$您的模式周围。例如,这会返回与r.IsValid我的示例中的输入相同的值:

Regex.IsMatch("ABC3DEF", @"^[^123]*$");
于 2013-11-05T14:28:23.993 回答