我有一个应用程序,需要对某些字段进行一些验证.其中一个是姓氏,可以由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.就个人而言,虽然我总是试图尽可能避免逃避,因为恕我直言,它混乱起来,不必要地延伸表达的长度.