我有一个应用程序需要对某些字段进行一些验证。其中之一是姓氏,可以由 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.
伙计们有什么想法吗?
最佳答案
-
表示一个字符范围,就像您使用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
。就个人而言,尽管我总是尽量避免转义,因为恕我直言,它会变得困惑并且不必要地延长表达式的长度。
关于C# Regex - 接受字符串中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16077560/