17

在 C# 代码中,我试图传递中文字符:" 中文ABC123".

当我一般使用字母数字时"^[a-zA-Z0-9\s]+$"

它没有通过"中文ABC123"并且正则表达式验证失败。

我还需要为 C# 添加哪些其他表达式?

4

2 回答 2

38

要匹配来自任何语言的任何字母字符,请使用:

\p{L}

如果您还想匹配数字:

[\p{L}\p{Nd}]+

\p{L} ... 匹配 unicode 类别字母的字符。
                它是 [\p{Ll}\p{Lu}\p{Lt}\p{Lm}\p{Lo}] 的缩写形式
                  \p{Ll}... 匹配小写字母。(abc)
                  \p{Lu}... 匹配大写字母。(ABC)
                  \p{Lt}... 匹配标题大写字母。
                  \p{Lm}... 匹配修饰符字母。
                  \p{Lo}... 匹配没有大小写的字母。(中文)

\p{Nd}... 匹配 unicode 类别十进制数字的字符。

只需替换:^[a-zA-Z0-9\s]+$^[\p{L}0-9\s]+$

于 2015-01-26T18:55:54.690 回答
3

感谢@Andie2302 指出正确的方法。

此外,对于世界上的许多语言,它仍然具有需要主要字符才能生成的“加法字符”(例如泰语单词“เก็บ”如果仅使用 \p{L} 将仅显示“เกบ”,您可以看到单词中缺少一些符号)。

这就是为什么 only\p{L}不适用于所有外语。

所以,你需要使用下面的代码,来支持几乎外语

\p{L}\p{M}

笔记:

L 代表“字母”(所有语言的所有字母,但不包括“标记”)

M代表'Mark'('Mark'不能单独显示,它需要'Letter'才能显示)

除了你需要号码,使用下面的代码

\p{N}

笔记:

N 代表“数字”


感谢这个网站提供了非常有用的信息

https://www.regular-expressions.info/unicode.html

于 2019-06-14T18:55:04.703 回答