用于验证UTF-8的正则表达式只包含"normal"字符

Regex for validating UTF-8 contains only "normal" characters

本文关键字:quot normal 字符 包含 验证 UTF-8 正则表达式 用于      更新时间:2023-09-26

在我的项目中,用户可以注册一个公开可见的昵称。我希望允许该名称包含来自任何脚本的字符(阿拉伯语,拉丁语,西里尔文,日文等),但防止控制字符,标点符号和非字母字符,如或.

我已经找到了很多从各种单独的脚本中过滤字母数字字符的例子,但我不想花几天时间挖掘编码表,试图手动允许每个脚本通过。

建议吗?

在JavaScript中,当你想在正则表达式中处理Unicode时,通常的解决方案是放弃。

下一个最常见的解决方案是使用xregexp,它碰巧有你似乎需要的类:

var unicodeWord = XRegExp('^''p{L}+$');
unicodeWord.test('Русский'); // -> true
unicodeWord.test('日本語'); // -> true
unicodeWord.test('العربية'); // -> true

我以前在Perl中使用'p{Latin}来选择所有拉丁字符。在这个页面的中间有一个完整的选项列表:http://www.regular-expressions.info/unicode.html。

这似乎可以延续到Javascript,因为它使用XRegExp。

编辑2:OR -创建一个不允许的字符列表来检查-然后'p{common}将作为起点。

编辑:显然,我做这件事的记忆来自许多亿年前。我无法让它与我当前的Perl构建一起工作(这是一种特殊情况)。所以-它可能完全错了。