在C#代码中,我正在尝试传递中文字符:
当我使用一般的字母数字组合
对于
我需要添加哪些其他表达式用于C#?
" 中文ABC123"
。当我使用一般的字母数字组合
" ^[a-zA-Z0-9\s]+$"
时,对于
"中文ABC123"
无法通过,正则表达式验证失败。我需要添加哪些其他表达式用于C#?
" 中文ABC123"
。" ^[a-zA-Z0-9\s]+$"
时,"中文ABC123"
无法通过,正则表达式验证失败。为了匹配来自任何语言的任何字母字符,请使用:
\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]+$
感谢@Andie2302指出正确的做法。
此外,对于世界上许多语言来说,它们仍然有“附加字符”,需要主要字符来生成它(例如泰语单词“เก็บ”,如果仅使用\p{L},它将只显示“เกบ”,您可以看到一些符号将从单词中消失)。
这就是为什么仅使用\p{L}
不适用于所有外语的原因。
因此,您需要使用下面的代码来支持几乎所有外语。
\p{L}\p{M}
注意:
L代表“字母”(所有语言的字母,但不包括“标记”)
M代表“标记”(标记不能单独显示,需要“字母”才能显示)
此外,如果需要数字,请使用以下代码
\p{N}
注意:
N 代表“数字”。
感谢这个网站提供的非常有用的信息:
\w
(单词字符)代替[\p{L}0-9]
。 - bzlm\p
,并将\w
视为“拉丁单词字符”,因此在这里更加棘手:https://dev59.com/OHVC5IYBdhLWcg3w51lv#22075070 - bzlm\p{Lo}
可能捕获哪些其他语言的字符? - Yoav Feuerstein\w
,这里有更多信息:https://dev59.com/53A75IYBdhLWcg3w_eb1#2998550(请注意,如果使用 ECMAScript 兼容行为,则\w
并不适用于所有语言) - derekantrican