1

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

XRegExp("^[a-zA-Z\s,.'-\pL]+$").test('á');

以上返回假。我从未使用过 xregexp,也无法在网上找到任何似乎可以解释如何做到这一点的东西。任何帮助都会很棒,谢谢!

这个特殊的正则表达式应该接受所有的 unicode 字符、破折号、逗号、句点和大小写字母。

4

1 回答 1

1

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

在此处输入图像描述

您还错过的是\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>

于 2017-03-30T06:51:29.100 回答