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

标签 javascript localization

如何检测字符串中的非罗马字符?请注意,这并不像对 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/

相关文章:

javascript - 如何在一个页面中多次使用 particles.js?

Yii2:如何批量提取 Yii::t() 消息以进行本地化?

c# - ASP.NET - 从 XML 文件读取本地化字符串的最佳做法是什么?

localization - 改变 UWP 应用程序的语言是有气质的

c# - 有什么方法可以确定 asp.net 中 CultureInfo 的文本方向吗?

javascript - Firefox:函数提升错误

javascript - 在两种方法之间交互代码的最佳方法是什么

javascript - 从对象生成的 dat.GUI

JavaScript/JSP - 为什么 "CheckboxStateChange"事件监听器不起作用?

java - 如何在 Java 中按照区域设置正确的顺序格式化日期和月份?