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

时间:2017-08-25 17:38:58

标签: javascript regex

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

1 个答案:

答案 0 :(得分:2)

使用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>
&#13;
&#13;
&#13;

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

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

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

  • 名称长度必须至少为3个字符且长度不得超过16个字符。
  • 没有玩家姓名可以包含“#Riot&#34;在它。

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

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

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