0

我对通过正则表达式的特定语言验证器感兴趣。我知道我可以用任何语言验证一个人的姓名,使用如下模式:

“[\p{L}\p{M}]”

但是,如果我希望验证针对特定语言怎么办?如果我的线程的CurrentUICulture或 CurrentCulture 设置能简单地将 of 的含义转换为"[\w]"适合德语、西班牙语、英语,尤其是中文的意思,那就太好了。它是这样工作的吗?如果是,那么这可能是我的答案。

如果没有,那么我的下一个兴趣是使用正则表达式脚本注释。但是,我注意到:

  1. 该链接中给出的列表不包括我特别感兴趣的简体“中文”。
  2. 我不认为 .NET 正则表达式功能支持基于脚本的匹配。是的?不?

因此,如果我无法使前两个选项起作用,我的最后一个选择是转向命名块。至少.net 支持的命名块列表包括 CJK 的几个条目。我想我可以简单地将几个 CJK 块组合起来,并称其为(简体)“中文”。

想法?

4

1 回答 1

0

我得出的结论是,在 .net 设置中,不存在对 CurrentUICulture 敏感的正则表达式。我还得出结论,最宽松的合理方案是执行验证——同时适用于所有语言——简单地拒绝所有形式的不可打印字符、“dingbats”、尖括号(以防止标记注入)和数学符号:

@”^[^\p{C}<>\p{Sm}\p{So}]*$”

中等允许的方法是使用明确捕获西方和东方字符集(包括变音符号和“组合字符”)的字符串:

@"^[\p{L}\p{M}\p{Pd}\p{Pi}\p{Pf}\s]*$"

如果我只想要西方字符,最不许可的方法是:

@"^[\p{IsBasicLatin}\p{IsLatin-1Supplement}\p{Pd}\p{Pi}\p{Pf}-[\p{N}]]*$"

以上仍然允许所有形式的引号,通常适用于像 O'Toole 这样的名称。

于 2012-06-06T13:33:50.097 回答