0

我不明白为什么这个正则表达式不能按我想要的方式工作。我希望它允许这样的事情:“Test123#%&*- Test”

[RegularExpression("[^a-zA-Z0-9/#%&*\\- ]")]

MSDN 文档仅给出了一个示例...

[RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$")]

我不想将输入限制为任何特定的字符长度,MSDN 示例确实这样做了。我已经将此正则表达式模式与Regex.net 中的对象一起使用,它工作得很好。为什么会有不同的DataAnnotations工作方式?

4

2 回答 2

1

我认为您使用否定类查找不允许字符的方式是错误的。我找不到文档来证明这一点,但对我来说这似乎是合乎逻辑的。

我认为您需要提供与允许的输入匹配的模式。

尝试

[RegularExpression("^[a-zA-Z0-9/#%&*\\- ]*$")]

*量词使它重复字符类 0 次或更多次。这也允许空字符串!如果您不希望空字符串使用量词+,那将是一个或多个。

*{0,}. 如果省略第二个数字,则表示没有最大匹配

+{1,}.

于 2013-02-28T20:47:00.533 回答
0

Regex DataAnnotations 的编写方式是查找有效内容,而不是查找无效内容。您想要匹配有效值。

MSDN 链接

我会放弃你的胡萝卜(^)。这将允许验证您提供的每个单独的字符。如果有任何失败,您将生成错误消息。

于 2013-02-28T20:21:46.150 回答