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

Tra*_*ffy 5 c# regex

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

这是我的正则表达式:

@"^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêçñ-\s]+$"
Run Code Online (Sandbox Code Playgroud)

\s通常的空间,但它不工作,我得到这个错误信息:

parsing "^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêçñ-\s]+$" - Cannot include class \s in character range.
Run Code Online (Sandbox Code Playgroud)

任何想法家伙?

F.P*_*F.P 11

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

这就是错误的来源.

要摆脱这种情况,如果要包含文字字符,则应始终放在-角色类末尾-:

@"^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêçñ\s-]+$"
Run Code Online (Sandbox Code Playgroud)

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

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

@"^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêç\-\s]+$"
Run Code Online (Sandbox Code Playgroud)

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