使用unicode检查时,XRegExp返回false \ p?

时间:2017-03-30 02:28:57

标签: javascript regex unicode xregexp

我正在尝试使用此名称验证正则表达式工作,但我遇到了问题。我已经确定我有regexp的unicode插件,但它似乎没有工作。这个正则表达式适用于php pcre regex。

  

XRegExp( “^ [A-ZA-Z \ S,.'- \ PL] + $”)试验( 'A');

以上返回false。我从来没有使用xregexp而且无法在网上找到任何似乎可以解释如何执行此操作的内容。任何帮助都会很棒,谢谢!

这个特殊的正则表达式应该接受所有unicode字符,短划线,逗号,句点和上下字母。

1 个答案:

答案 0 :(得分:1)

一旦你在控制台中查看你的模式是什么样子,这很容易。它看起来像/^[a-zA-Zs,.'-pL]+$/,这意味着它根本不匹配Unicode字母,因为反斜杠消失了(你需要在字符串文字中使用双反斜杠来定义一个文字反斜杠,它可以逃避正则表达式中的特殊字符)。请注意,不是空格,而是匹配文字s'-p创建有效范围,因此不会抛出错误,但结果确实是意外的。以下是该范围匹配(是的,包括数字):

enter image description here

您还错过的是\pL已包含[a-zA-Z],因此您的模式中的部分是多余的。



// YOUR REGEX
console.log("^[a-zA-Z\s,.'\-\pL]+$"); // => /^[a-zA-Zs,.'-pL]+$/
// SHOULD BE DEFINE AS
console.log("^[\\s,.'\\pL-]+$"); // => /^[\s,.'\pL-]+$/
// TEST
console.log(XRegExp("^[\\s,.'\\pL-]+$").test('á')); // => true

<script src="http://cdnjs.cloudflare.com/ajax/libs/xregexp/3.1.1/xregexp-all.min.js"></script>
&#13;
&#13;
&#13;