我需要哪个正则表达式来检查非拉丁字符?

12

我正在检查一个字段是否为拉丁字符。

var foreignCharacters = $("#foreign_characters").val();
var rlatins = /[\u0000-\u007f]/;

if (rlatins.test(foreignCharacters)) {
  alert("This is Latin Characters");
} else {
  alert("This is non-latin Characters");    
}

这个代码可以很好地运行,但是我想改变它,使得当我输入任何非拉丁字符(如汉字),以及一个空格(在我目前使用的范围内)时,它仍然会显示为非拉丁字符。

我该如何更改我现有的正则表达式来实现这一点?

3个回答

18

不要测试ASCII字符的存在,而是测试非ASCII字符的存在:

var foreignCharacters = $("#foreign_characters").val();
var rforeign = /[^\u0000-\u007f]/;

if (rforeign.test(foreignCharacters)) {
  alert("This is non-Latin Characters");
} else {
  alert("This is Latin Characters");    
}

好主意!谢谢!当我尝试在PHP中使用那个正则表达式时,出现了这个错误:编译失败:PCRE不支持\L、\l、\N、\U或\u在偏移量2处。 - zeckdude
1
PHP中的不同语法:尝试使用/[\x{0000}-\x{007f}]/u - Tim Pietzcker
1
它表示德语中的“Prüfung”是非拉丁字符。 - ryan2johnson9

4

如果你想检查整个字符串,请使用以下代码(在php中)

preg_match('/^[\x{0000}-\x{007F}]*$/u',$s);

1

除了使用代码点范围制作自己的正则表达式外,还可以使用xregexp库

以下是文档中的一些示例:

XRegExp('^\\p{Hiragana}+$').test('ひらがな'); // -> true
XRegExp('^[\\p{Latin}\\p{Common}]+$').test('Über Café.'); // -> true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接