任何可见的Unicode字母字符的JavaScript正则表达式模式

5

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


1
您的模式在XRegExp中是有效的。 - Wiktor Stribiżew
“任何可见的Unicode字母字符”是什么意思?所有的Unicode字母吗?请参考此演示 - Wiktor Stribiżew
谢谢大家,演示看起来XRegExp可以胜任。如果你好奇,我正在尝试为英雄联盟网站验证召唤师名称。这是他们定义的“任何可见Unicode字母字符、数字(0-9)、空格、下划线和句点”的完整字符集合。https://support.riotgames.com/hc/en-us/articles/201752814-Summoner-Name-FAQ#h1q5 - Andrew
1个回答

4
使用 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”。

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

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

+(1次或多次出现)替换为 {3,16} 限定符(3到16次出现),并且 (?!.*\\bRiot\\b) 负向先行断言将在字符串中(或行,因为 . 匹配任何字符但不包括换行符)任何位置存在单词(由于 \\b 单词边界)Riot 时,匹配将失败。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接