我需要验证一个字段是否为空。但它应该允许英语和外语字符(UTF-8),但不允许特殊字符。我不擅长正则表达式。所以这方面的任何帮助都会很棒......
问问题
13148 次
3 回答
6
如果您想支持多种语言,则必须仅排除您不想要的字符,因为指定您想要的所有范围将很困难。
您需要查看Unicode 块列表和/或字符数据库来识别要排除的块(例如,U+0000 到 U+001F。这篇 Wikipedia 文章也可能有所帮助。
然后使用带有字符类的正则表达式来查找要排除的内容。
例如,这将检查 U+0000 到 U+001F 和 U+007F 字符(显然,您将排除的不仅仅是这些):
if (/[\u0000-\u001F\u007F]/.exec(theString)) {
// Contains at least one invalid character
}
识别“[]
字符类”(要查找的字符列表和/或范围)。那个特别的说寻找\u0000
through \u001F
(包括)以及\u007F
.
于 2012-12-13T08:02:24.197 回答
4
如果我能说“就做/^\w+$/.test(word)
”就好了,但是......
有关JavaScript 正则表达式中 unicode 支持(或更确切地说是缺乏)的当前状态,请参阅此答案。
您可以使用他建议的库,这可能会很慢,或者为此寻求服务器的帮助(可能会更慢)。
于 2012-12-13T08:00:38.647 回答
0
您可以像这样测试 unicode 字母:
str.match(/\p{L}/u)
或者对于这样的非字母的存在:
str.match(/[^\p{L}]/u)
于 2021-01-09T10:07:54.390 回答