如何检测JS中的非罗马字符?

时间:2014-06-08 16:00:54

标签: javascript localization

如何检测字符串中的非罗马字符?请注意,它并不像在A-Z和0-9范围之外对所有字符进行分类那么简单。罗马字符有很多变化,例如德语ä,ö,ü - 它们仍然是罗马字母,另一方面,“中文”显然不是罗马字体。

1 个答案:

答案 0 :(得分:2)

JavaScript本身就是Unicode,各种脚本的字符范围在http://www.unicode.org/charts/

中有详细记录

您将看到有几个块对应于Latin(Roman)脚本。其中最常见的是称为Latin-1补充的高ASCII范围,范围为0080-00FF。这将包括你提到的德语字符。

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块构建正则表达式,但我确信那里有更好的资源,