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

本文关键字:空格 字符串 Regex | 更新日期: 2023-09-27 18:09:41

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

这是我的正则表达式:

@"^[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.

有什么想法吗?

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

-表示字符范围,就像您使用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 中的任何字符解释为。就我个人而言,我总是尽量避免转义,因为在我看来,它会使表达式变得混乱,并且不必要地延长表达式的长度。

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

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

参见Regex Storm: [a-'s], [a'-'s]

[regulareexpression (@"^[a-zA-Z's]+$", ErrorMessage ="只允许字母字符和空格")]

这是