应该有类似于\w的东西,可以匹配字母或标记类别中的任何代码点(不仅仅是ASCII码),并且希望有像[[P*]]这样的过滤器用于标点符号等。


当前回答

你还可以使用:

function myFunction() {
  var str = "xq234"; 
  var allowChars = "^[a-zA-ZÀ-ÿ]+$";
  var res = str.match(allowChars);
  if(!str.match(allowChars)){
    res="true";
  }
  else {
    res="false";
  }
  document.getElementById("demo").innerHTML = res;

其他回答

[^\u0000-\u007F]+用于不包括ASCII字符的任何字符。

例如:

有趣的功能(s) 归来- [^ \ u0000 \ u007F]。测试(s); 的 控制台日志(isNonLatinCharacters(“身分");/ /日本 控制台日志(isNonLatinCharacters(“测试");/ /中国 控制台日志(isNonLatinCharacters(حمید");/ /波斯语 控制台日志(isNonLatinCharacters(“테스트");/ /韩国 控制台日志(isNonLatinCharacters(परीक्षण");/ /印地语 控制台日志(isNonLatinCharacters(“מִבְחָן");/ /希伯来语

这里有一些完美的参考:

Unicode范围RegExp生成器

Unicode正则表达式

Unicode 10.0字符代码图表

匹配Unicode块范围

在JavaScript中,\w和\d是ASCII,而\s是Unicode。别问我为什么。JavaScript支持带有Unicode类别的\p,您可以使用它来模拟支持Unicode的\w和\d。

\d使用\p{N}(数字)

[\p{L}\p{N}\p{Pc}\p{M}](字母,数字,下划线,标记)

更新:不幸的是,我错了。JavaScript也不正式支持\p,尽管一些实现可能仍然支持它。JavaScript正则表达式中对Unicode的唯一支持是使用\uFFFF匹配特定的代码点。你可以在字符类的范围内使用它们。

正如在其他回答中提到的,JavaScript正则表达式不支持Unicode字符类。但是,有一个库确实提供了这一点:Steven Levithan的优秀XRegExp及其Unicode插件。

这样就可以了:

/[A-Za-z\u00C0-\u00FF ]+/.exec('hipopótamo maçã pólen ñ poção água língüa')

它显式地选择一个unicode字符范围。 它将适用于拉丁字符,但其他奇怪的字符可能超出这个范围。

由于也没有找到一个好的解决方案,我很久以前写了一个小脚本,从unicode规范(v.5.0.0)下载数据,并为BMP中的每个unicode类别和子类别生成间隔(最近被一个使用自己的原生unicode支持的小Java程序所取代)。

基本上它将\p{…}到一个值范围,很像Tomalak提到的工具的输出,但是间隔可能会非常大(因为它不是处理块,而是处理分散在许多不同地方的字符)。

例如,一个正则表达式是这样写的:

var regex = unicode_hack(/\p{L}(\p{L}|\p{Nd})*/g);

会被转换成这样:

/[\u0041-\u005a\u0061-\u007a...]([...]|[\u0030-\u0039\u0660-\u0669...])*/g

我在实践中没有经常使用它,但从我的测试来看,它似乎工作得很好,所以我在这里发布,以防有人发现它有用。尽管生成的正则表达式很长(上面的示例展开后有3591个字符),但性能似乎是可以接受的(请参阅jsFiddle中的测试;感谢@modiX和@Lwangaman的改进)。

下面是源代码(原始,27.5KB;缩小,24.9KB,没有好到哪里去…)通过不转义unicode字符,它可能会变得更小,但OTOH会有编码问题的风险,所以我就不做改动了。希望在ES6中这种事情不再需要了。

更新:这看起来与Tim Down提到的XRegExp Unicode插件中采用的策略相同,只是在这种情况下使用了常规的JavaScript正则表达式。