5

我需要验证一个字段是否为空。但它应该允许英语和外语字符(UTF-8),但不允许特殊字符。我不擅长正则表达式。所以这方面的任何帮助都会很棒......

4

3 回答 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
}

识别“[]字符类”(要查找的字符列表和/或范围)。那个特别的说寻找\u0000through \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 回答