如何检测字符串中的非罗马字符?请注意,这并不像对 A-Z 和 0-9 范围之外的所有字符进行分类那么简单。罗马字符有很多变体,例如德语 ä,ö,ü - 仍然是罗马字符,另一方面,“中文”显然不是罗马字符。
最佳答案
JavaScript 本身是 Unicode,各种脚本的字符范围在 http://www.unicode.org/charts/ 中有详细记录。
您会看到有几个 block 对应拉丁(罗马)脚本。其中最常见的是在 0080–00FF 范围内称为 Latin-1 补充的高 ASCII 范围。这将包括您提到的德语字符。
JavaScript 让我们可以使用正则表达式很好地测试 Unicode 范围。因此,您可以按照此示例在多个字符串中检测 Latin 1 补充字符:
var en = 'Coffee',
fr = 'Café',
el = 'Καφές';
console.log( en.replace( /[\u0080-\u00FF]/g, '*') );
console.log( fr.replace( /[\u0080-\u00FF]/g, '*') );
console.log( el.replace( /[\u0080-\u00FF]/g, '*') );
这将打印出:
Coffee
Caf*
Καφές
因为根据我们的字符范围,只有带重音的 é
匹配拉丁增补范围(因此它被替换为 *
)
因此,为了更好地回答您的问题,检测您可以执行的“非罗马”字符:
var str = 'a ä ö ü 中 文',
reg = /[^\u0000-\u024F\u1E00-\u1EFF\u2C60-\u2C7F\uA720-\uA7FF]/g;
console.log( str.replace( reg, '?') );
会显示:
a ä ö ü ? ?
您可以使用这些范围来执行您特别需要的任何操作。我放在一起this crude tool用于从 unicode block 构建正则表达式,但我很确定那里有更好的资源,
关于javascript - 如何检测JS中的非罗马字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24107993/