0

我需要在 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; }

通过从正则表达式验证中删除一个字符(@ 或 -)正确发生。我再次添加字符,不会引发验证错误

现在我被卡住了,不知道该怎么办..请指教

4

1 回答 1

0

我只能在普通的 c# 中测试这个,我发现你的正则表达式有两个问题:

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

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

所以,试试

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