使用Data Annotation正则表达式属性时出现奇怪的行为

时间:2013-02-21 04:58:20

标签: .net regex

我需要在ASP.NET MVC 4中使用数据注释编写模型对象验证。要求是允许所有字母,数字和以下字符。

@'!&(){}:;,[].+?/-

所有其他特殊字符应该是验证错误。 我有以下代码

[RegularExpression(@"^[a-zA-Z0-9 @'!&(){}:;,\[\].+?/-]+", ErrorMessage = NameIsNotValid)] 
public string Name { get; set; }

此代码不会为字符串“TEST NAME |||”

抛出验证异常

但如果我将代码修改为

[RegularExpression(@"^[a-zA-Z0-9 '!&(){}:;,\[\].+?/-]+", ErrorMessage = NameIsNotValid)] 
    public string Name { get; set; }

通过从正则表达式验证中删除一个char(@或 - )来正确执行。我再次添加char,不抛出验证错误

现在我被困住了,不知道该做什么..请建议

1 个答案:

答案 0 :(得分:0)

我只能在正常的c#中测试它,我发现你的正则表达式存在两个问题:

  1. 您不使用结束锚$,因此只要名称以有效字符开头,您的验证应始终为真。

  2. a-zA-Z只是ASCII字母。我会将Unicode character property \p{L}替换为匹配任何语言的任何字母。

  3. 所以,试试

    [RegularExpression(@"^[\p{L}0-9 @'!&(){}:;,\[\].+?/-]+$", ErrorMessage = NameIsNotValid)] 
    public string Name { get; set; }