C#正则表达式中的外文字符
Foreign language characters in Regular expression in C#
在 C# 代码中,我试图传递中文字符:" 中文ABC123"
。
当我一般使用字母数字时 "^[a-zA-Z0-9\s]+$"
,
它没有通过 "中文ABC123"
并且正则表达式验证失败。
我还需要为 C# 添加哪些其他表达式?
要匹配来自任何语言的任何字母字符,请使用:
\p{L}
如果你也想匹配号码:
[\p{L}\p{Nd}]+
\p{L}
... 匹配 unicode 类别字母的一个字符。
它是 [\p{Ll}\p{Lu}\p{Lt}\p{Lm}\p{Lo}]
的缩写形式
\p{Ll}
... 匹配小写字母。 (abc)
\p{Lu}
... 匹配大写字母。 (美国广播公司)
\p{Lt}
... 匹配标题字母。
\p{Lm}
...匹配修饰符字母。
\p{Lo}
... 匹配不区分大小写的字母。 (中文)
\p{Nd}
... 匹配 unicode 类别十进制数字的字符。
只需将 ^[a-zA-Z0-9\s]+$
替换为 ^[\p{L}0-9\s]+$
感谢@Andie2302 指出正确的方法。
此外,对于世界上的许多语言,它仍然有 'addition character' 需要主角才能生成它(例如泰语 'เก็บ' 如果只使用 \p{L} 它将显示只有'เกบ',你可以看到这个词中会缺少一些符号)。
这就是为什么只有 \p{L}
不适用于所有外语。
所以,你需要使用下面的代码,来支持几乎所有的外语
\p{L}\p{M}
注意:
L代表'Letter'(所有语言的所有字母,但不包括'Mark')
M代表'Mark'('Mark'不能单独显示,需要'Letter'才能显示)
此外,您需要 Number,请使用以下代码
\p{N}
注意:
N代表'Numeric'
感谢此网站提供非常有用的信息
在 C# 代码中,我试图传递中文字符:" 中文ABC123"
。
当我一般使用字母数字时 "^[a-zA-Z0-9\s]+$"
,
它没有通过 "中文ABC123"
并且正则表达式验证失败。
我还需要为 C# 添加哪些其他表达式?
要匹配来自任何语言的任何字母字符,请使用:
\p{L}
如果你也想匹配号码:
[\p{L}\p{Nd}]+
\p{L}
... 匹配 unicode 类别字母的一个字符。
它是 [\p{Ll}\p{Lu}\p{Lt}\p{Lm}\p{Lo}]
的缩写形式
\p{Ll}
... 匹配小写字母。 (abc)
\p{Lu}
... 匹配大写字母。 (美国广播公司)
\p{Lt}
... 匹配标题字母。
\p{Lm}
...匹配修饰符字母。
\p{Lo}
... 匹配不区分大小写的字母。 (中文)
\p{Nd}
... 匹配 unicode 类别十进制数字的字符。
只需将 ^[a-zA-Z0-9\s]+$
替换为 ^[\p{L}0-9\s]+$
感谢@Andie2302 指出正确的方法。
此外,对于世界上的许多语言,它仍然有 'addition character' 需要主角才能生成它(例如泰语 'เก็บ' 如果只使用 \p{L} 它将显示只有'เกบ',你可以看到这个词中会缺少一些符号)。
这就是为什么只有 \p{L}
不适用于所有外语。
所以,你需要使用下面的代码,来支持几乎所有的外语
\p{L}\p{M}
注意:
L代表'Letter'(所有语言的所有字母,但不包括'Mark')
M代表'Mark'('Mark'不能单独显示,需要'Letter'才能显示)
此外,您需要 Number,请使用以下代码
\p{N}
注意:
N代表'Numeric'
感谢此网站提供非常有用的信息