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
。
还有其他方法可以匹配它们吗?
答案 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
}
正则表达式演示: