C#Regex - 接受字符串中的空格

时间:2013-04-18 08:02:42

标签: c# regex

我有一个应用程序,需要对某些字段进行一些验证。其中一个是姓氏,可以由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.

任何想法的人?

3 个答案:

答案 0 :(得分:10)

-表示字符范围,就像使用A-Z描述 A和Z 之间的任何字符一样。你的正则表达式使用引擎试图解释为ñ和\ s 之间的任何字符的ñ-\s - 然后注意到\s没有多少意义因为\s本身只是任何空格字符的缩写

这就是错误的来源。

要摆脱这种情况,如果要包含{{1},则应始终-放在角色类的结束 中文字字符:

-

这样,引擎知道@"^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêçñ\s-]+$" 不是字符范围,而是分别是\s-\s两个字符。

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

-

现在引擎将@"^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêç\-\s]+$" 解释为不是字符范围,而是任何字符ñ\-\sñ- 。就个人而言,虽然我总是试图尽可能避免逃避,因为恕我直言,它混乱起来,不必要地延长了表达的长度。

答案 1 :(得分:4)

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

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

另见Regex Storm:[a-\s][a\-\s]

答案 2 :(得分:0)

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

这有效