【问题标题】:JavaScript regex pattern for any visible unicode letter characters任何可见 Unicode 字母字符的 JavaScript 正则表达式模式
【发布时间】:2017-08-25 17:38:58
【问题描述】:

我正在开发一个 JavaScript 应用程序,该应用程序要求我识别“任何可见的 Unicode 字母字符、数字 (0-9)、空格、下划线和句点”的集合。建议的正则表达式模式是^[0-9\\p{L} _\\.]+$,但这似乎不适用于 JavaScript。给我带来麻烦的部分是“任何可见的 Unicode 字母字符”,因为其中包括非英文字符。是否有一些 JavaScript 正则表达式模式可以识别 Unicode 字母字符集?

【问题讨论】:

  • 您的模式在 XRegExp 中有效。
  • 什么是“任何可见的 Unicode 字母字符”?所有 Unicode 字母?见this demo
  • 谢谢大家,演示看起来 XRegExp 可以解决问题。如果您好奇,我正在尝试验证英雄联盟网站的召唤师名称。这是他们定义为“任何可见的 Unicode 字母字符、数字 (0-9)、空格、下划线和句点”support.riotgames.com/hc/en-us/articles/… 的完整字符集

标签: javascript regex


【解决方案1】:

使用XRegExp 库来解析你当前的正则表达式:

var pattern = new XRegExp("^[0-9\\p{L} _.]+$");
var s = "123 Московская Street.";
if (XRegExp.test(s, pattern)) {
    console.log("Valid");
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.2.0/xregexp-all.min.js"></script>

注意^[0-9\\p{L} _\\.]+$ 匹配

  • ^ - 字符串开头
  • [0-9\\p{L} _\\.]+ - 一个或多个字符是:
    • 0-9 - ASCII 数字
    • \\p{L} - 字母
    • - 空格
    • _ - 下划线
    • . - 一个点(在字符类中,. 匹配文字点,无需转义)
  • $ - 字符串结束。

如果您还想包括以下条件:

  • 名称的长度必须至少为 3 个字符且不超过 16 个字符。
  • 任何玩家名称中都不能包含“Riot”一词。

您可以将模式扩展到以下内容:

var pattern = new XRegExp("^(?!.*\\bRiot\\b)[0-9\\p{L} _\\.]{3,16}$");
                            ^^^^^^^^^^^^^^^^                ^^^^^^

其中+(1 次或多次出现)被替换为{3,16} 限制量词(3 到 16 次出现),如果存在整个单词,(?!.*\\bRiot\\b) 否定前瞻将导致匹配失败(由于 \\b 单词边界)Riot 位于字符串(或行,因为. 匹配除换行符之外的任何字符)内的任何位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2011-06-12
    相关资源
    最近更新 更多