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


当前回答

2018年9月(2019年2月更新)

regexp /\p{L}/u用于匹配字母(作为unicode类别)

适用于Chrome 68.0.3440.106和Safari 11.1.2 (13605.3.8) 不能在Firefox 65.0上工作:(

下面是一个工作示例

在下面的字段,你应该能够键入字母,但不是数字<br> <input type="text" name="field" onkeydown="return /\p{L}/u.test(event.key)">

我在这里报告这个错误。

更新

经过超过2年的时间:1500035 > 1361876 > 1634135终于修复了这个错误,将在Firefox v.78+中可用

其他回答

正如在其他回答中提到的,JavaScript正则表达式不支持Unicode字符类。但是,有一个库确实提供了这一点:Steven Levithan的优秀XRegExp及其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匹配特定的代码点。你可以在字符类的范围内使用它们。

如果您正在使用Babel,那么Unicode支持已经可用。

我还发布了一个转换源代码的插件,这样你就可以编写像/^\p{L}+$/这样的正则表达式。然后将这些转换为浏览器能够理解的内容。

下面是插件的项目页面:

babel-plugin-utf-8-regex

2018年9月(2019年2月更新)

regexp /\p{L}/u用于匹配字母(作为unicode类别)

适用于Chrome 68.0.3440.106和Safari 11.1.2 (13605.3.8) 不能在Firefox 65.0上工作:(

下面是一个工作示例

在下面的字段,你应该能够键入字母,但不是数字<br> <input type="text" name="field" onkeydown="return /\p{L}/u.test(event.key)">

我在这里报告这个错误。

更新

经过超过2年的时间:1500035 > 1361876 > 1634135终于修复了这个错误,将在Firefox v.78+中可用

你还可以使用:

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;