17

我有以下只允许字母的正则表达式:

     /[a-zA-Z]+/

     a = "abcDF"
     if (a.match(/[a-zA-Z]+/) == a){
        //Match
     }else{
        //No Match
     } 

我如何使用 p{L} 来做到这一点(通用 - 任何语言,如德语、英语等。)

我尝试了什么:

  a.match(/[p{l}]+/)
  a.match(/[\p{l}]+/)
  a.match(/p{l}/)
  a.match(/\p{l}/)

但所有字母 a = "aB" 都返回 null

4

3 回答 3

13

从 ECMAScript 2018 开始,JavaScript 终于原生支持Unicode 属性转义

对于旧版本,您要么需要自己定义所有相关的 Unicode 范围。或者您可以将 Steven Levithan 的XRegExp包与 Unicode 插件一起使用,并利用其 Unicode 属性快捷方式:

var regex = new XRegExp("^\\p{L}*$")
var a = "abcäöüéèê"
if (regex.test(a)) {
    // Match
} else {
    // No Match
}
于 2012-11-03T14:57:42.283 回答
6

如果你愿意使用Babel来构建你的 javascript,那么我发布了一个 babel-plugin,它可以将正则表达式/^\p{L}+$/转换/\p{^White_Space}/为浏览器可以理解的正则表达式。

这是项目页面:https ://github.com/danielberndt/babel-plugin-utf-8-regex

于 2015-05-08T18:30:22.220 回答
2
于 2020-08-18T13:31:01.280 回答