6

我有一个应用程序需要对某些领域进行一些验证。其中一个是可以由 2 个单词组成的姓氏。在我的正则表达式中,我必须接受这些空格,所以我尝试了很多东西,但没有找到任何解决方案。

这是我的正则表达式:

@"^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêçñ-\s]+$"

通常用于空格,\s但它不起作用,我收到此错误消息:

parsing "^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêçñ-\s]+$" - Cannot include class \s in character range.

有什么想法吗?

4

3 回答 3

12

-表示一个字符范围,就像您A-Z用来描述A 和 Z 之间的任何字符一样。您的正则表达式使用ñ-\s引擎尝试将其解释为ñ 和 \s 之间的任何字符- 然后注意到,这\s在那里没有多大意义,因为\s它本身只是任何空白字符的缩写

这就是错误的来源。

为了摆脱这种情况,如果你想包含文字字符,你应该总是把你的字符类-放在末尾:-

@"^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêçñ\s-]+$"

这样,引擎就知道\s-不是一个字符范围,而是两个字符\s-分开。

另一种方法是转义-字符:

@"^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêç\-\s]+$"

因此,现在引擎ñ\-\s不再解释为字符范围,而是任何字符ñ,-\s. 就个人而言,虽然我总是尽量避免逃避,因为恕我直言,它会造成混乱并且不必要地延长表达的长度。

于 2013-04-18T08:09:08.913 回答
4

您需要转义最后一个-字符 -ñ-\s解析为 range a-z

@"^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêçñ\-\s]+$"

另请参阅正则表达式风暴:[a-\s][a\-\s]

于 2013-04-18T08:04:51.110 回答
0

[RegularExpression(@"^[a-zA-Z\s]+$", ErrorMessage = "只允许字母字符和空格。")]

这有效

于 2016-10-28T15:01:19.613 回答