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

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

任何想法的家伙?

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

这就是错误的来源。

要摆脱这种情况,你应该总是-你的角色类末尾 ,如果你想包含-文字字符:

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

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

另一种方法是逃避-角色:

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

所以现在引擎将ñ\-\s解释为字符范围,而不是任何字符ñ-\s 。 就个人而言,虽然我总是试图尽可能避免逃避,因为恕我直言,它混乱起来,不必要地延长表达的长度。

你需要逃避最后一个字符 – ñ-\s被解析为范围az

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

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

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

这很有效