如何检测字符串中的非罗马字符?请注意,它并不像在A-Z和0-9范围之外对所有字符进行分类那么简单。罗马字符有很多变化,例如德语ä,ö,ü - 它们仍然是罗马字母,另一方面,“中文”显然不是罗马字体。
答案 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块构建正则表达式,但我确信那里有更好的资源,