我对通过正则表达式的语言特定验证器感兴趣。我知道我可以用任何语言验证一个人的名字,其格式如下:
“[\p{L}\p{M}]”
但是,如果我希望验证是针对特定语言的呢?如果我的主题CurrentUICulture或CurrentCulture设置只是将"[\w]"
的含义转换为适合德语,西班牙语,英语,尤其是中文的内容,那就太好了。这样做有用吗?如果是,那么这可能是我的答案。
如果没有,那么我的下一个兴趣是使用regex script annotation。但是,我注意到:
所以,如果我不能让前两个选项起作用,我的最后选择是转向named blocks。至少.net supported named blocks列表包括CJK的几个条目。我想我可以简单地组合几个CJK块,并称之为(简化)“中文”。
思想?
答案 0 :(得分: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这样的名字。