正则表达式不匹配十六进制或十进制代码的特定非标准字符

时间:2015-05-20 18:29:50

标签: javascript regex

var regex = /^.*[\xC0\xC1\xC2\xC3\xC4\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD1\xA5\xD2\xD3\xD4\xD5\xD6\x8A\xD9\xDA\xDB\xDC\xDD\xDE\x9E\x8E].*/;
//check if text contains any of ÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖŠÚÛÜÙÝŸŽ
if (text.match(regex)) {
    console.log(text);
}

有谁知道上面为什么不匹配ŠŸŽ?这些是\x8A\x9E\x9F。它适用于这三者中的所有部分。我还尝试了\u0138\u0159\u0158

还有其他方法可以匹配它们吗?

2 个答案:

答案 0 :(得分:1)

您找到这些字符值的表格显示:

  

下表符合ISO 8859-1,也称为ISO Latin-1。

(请注意,此表实际上甚至不是ISO 8859-1,而是一个名为Windows-1252的超集。)

ECMAScript 5规范的第2节说

  

本标准的符合要求的实施应解释符合Unicode标准的字符......使用UCS-2或UTF-16作为采用的编码形式,执行级别3.

JavaScript字符始终被视为UTF-16或UCS-2字符。

在Windows-1252中,字符值8A对应于名为LATIN CAPITAL LETTER S WITH CARON的字符。在UTF-16中,代码点008A是名为LINE TABULATION SET的不可打印字符(请参阅PDF of the 008x range from unicode.org。)

在UTF-16中,captial-S-with-caron字符位于代码点0160

如果您想知道角色的Unicode代码点,可以通过运行代码"X".charCodeAt(0).toString(16)(其中X是您要检查的角色)轻松找到它。

答案 1 :(得分:0)

我不确定你为什么要尝试匹配十六进制或十进制而不是文字字符,以下正则表达式适用于我:

var subject = "ÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖŠÚÛÜÙÝŸŽ";
if (/[ÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖŠÚÛÜÙÝŸŽ]/i.test(subject)) {
    // Successful match
} else {
    // Match attempt failed
}

正则表达式演示:

https://regex101.com/r/fR6uT6/1