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

Regular expression not matching particular non standard characters by Hex or decimal code

本文关键字:十进制 代码 正则表达式 十六进制 不匹配 非标准 字符      更新时间:2023-09-26
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

是否有其他方法来匹配它们?

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

下表根据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的不可打印字符(参见unicode.org上的008x范围的PDF)

在UTF-16中,大写s -with-caron字符位于代码点0160

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

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

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

Regex演示:https://regex101.com/r/fR6uT6/1