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

Mal*_*lte 4 javascript localization

如何检测字符串中的非罗马字符?请注意,这并不像对 AZ 和 0-9 范围之外的所有字符进行分类那么简单。罗马字符有很多变体,例如德语 \xc3\xa4、\xc3\xb6、\xc3\xbc - 它们仍然是罗马字符,另一方面,“\xe4\xb8\xad\xe6\x96\x87”,显然不是罗马文字。

\n

Tim*_*Tim 6

JavaScript 本身就是 Unicode,各种脚本的字符范围在以下位置都有详细记录:http://www.unicode.org/charts/中有详细记录。

\n\n

您将看到有几个与拉丁(罗马)脚本相对应的块。其中最常见的是高位 ASCII 范围,称为 Latin-1 补充,范围为 0080\xe2\x80\x9300FF。这将包括您提到的德语字符。

\n\n

JavaScript 让我们可以使用正则表达式很好地测试 Unicode 范围。因此,您可以按照以下示例检测多个字符串中的 Latin 1 补充字符:

\n\n
var en = \'Coffee\',\n    fr = \'Caf\xc3\xa9\',\n    el = \'\xce\x9a\xce\xb1\xcf\x86\xce\xad\xcf\x82\';\n\nconsole.log( en.replace( /[\\u0080-\\u00FF]/g, \'*\') );\nconsole.log( fr.replace( /[\\u0080-\\u00FF]/g, \'*\') );\nconsole.log( el.replace( /[\\u0080-\\u00FF]/g, \'*\') );\n
Run Code Online (Sandbox Code Playgroud)\n\n

这将打印出:

\n\n
Coffee\nCaf*\n\xce\x9a\xce\xb1\xcf\x86\xce\xad\xcf\x82\n
Run Code Online (Sandbox Code Playgroud)\n\n

因为根据我们的字符范围,只有重音符号与\xc3\xa9拉丁补充范围相匹配(因此它被替换为*)

\n\n

因此,为了更好地回答您的问题,要检测“非罗马”字符,您可以执行以下操作:

\n\n
var str = \'a \xc3\xa4 \xc3\xb6 \xc3\xbc \xe4\xb8\xad \xe6\x96\x87\',\n    reg = /[^\\u0000-\\u024F\\u1E00-\\u1EFF\\u2C60-\\u2C7F\\uA720-\\uA7FF]/g;\n\nconsole.log( str.replace( reg, \'?\') );\n
Run Code Online (Sandbox Code Playgroud)\n\n

这会显示:

\n\n
a \xc3\xa4 \xc3\xb6 \xc3\xbc ? ?\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以使用这些范围来执行您特别需要的任何操作。我组装了这个粗糙的工具,用于从 unicode 块构建正则表达式,但我很确定那里有更好的资源,

\n