1

我有一个实体框架模型,我已经对其进行了一些验证,特别是一个接受字母数字、空格和一些标点符号的正则表达式。但是,当尝试添加斜杠“/”作为可接受的字符时,它似乎允许一些额外的不可接受的字符(在本例中为逗号)。

表达式 1:

[RegularExpression(@"[\w\s.()&'-]+", ErrorMessage = "Contains an illegal character")]

这适用于除正斜杠之外的所有预期字符(即它不接受逗号,但也不接受斜杠)

表达式 2:

[RegularExpression(@"[\w\s.()&'-/]+", ErrorMessage = "Contains an illegal character")]

这现在接受斜杠(好),但现在也接受逗号(不需要)

表达式 3:

[RegularExpression(@"[\w\s.()&'-\/]+", ErrorMessage = "Contains an illegal character")]

试图逃避正斜杠。与 experssion 2 相同的效果,接受斜杠和逗号

这只是我需要做的一些奇怪的转义或类似的技巧吗?.Net 正则表达式的一些副作用?我绝对认为“表达式 2”会接受斜杠,但不接受逗号,但事实似乎并非如此。

4

2 回答 2

1

'-' 字符必须是字符类中的最后一个字符,如果不是,它定义了可接受的字符范围:[\w\s.()&'/-]+'

于 2013-05-29T04:08:22.237 回答
1

这是因为破折号,-. 字符类中的破折号表示一个范围例如 a-z0-9。(这是一个不是字典顺序而是基于 ASCII 的范围。如果您查看ASCII 表,您会看到逗号,(44) 位于非定向撇号'(39) 和正斜杠/(47) 之间。 ) 您需要将其-作为字符类的第一个或最后一个字符,以免它被解释为一个范围。

于 2013-05-29T04:09:30.963 回答