我有以下正则表达式只允许使用字母:
/[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答案 0 :(得分:13)
从ECMAScript 2018开始,JavaScript最终本身支持Unicode property escapes。
对于旧版本,您需要自己定义所有相关的Unicode范围。或者您可以使用Steven Levithan的XRegExp
package with Unicode add-ons并使用其Unicode属性快捷方式:
var regex = new XRegExp("^\\p{L}*$")
var a = "abcäöüéèê"
if (regex.test(a)) {
// Match
} else {
// No Match
}
答案 1 :(得分:6)
如果您愿意使用Babel构建您的javascript,那么我发布了一个babel-plugin,它会将/^\p{L}+$/
或/\p{^White_Space}/
之类的正则表达式转换为浏览器的正则表达式会明白。
这是项目页面:https://github.com/danielberndt/babel-plugin-utf-8-regex
答案 2 :(得分:0)
您可以将\p{L}
与现代ECMAScript 2018+ compliant JavaScript environments结合使用,但是要记住,只有在传递u
修饰符/标志时,才支持Unicode属性类:>
a.match(/\p{L}+/gu)
a.match(/\p{Alphabetic}+/gu)
将匹配a
字符串中所有出现的1个或多个Unicode字母。
注意,\p{Alphabetic}
(\p{Alpha}
)包括与\p{L}
匹配的所有字母,以及与{{1 }}(例如\p{Nl}
–罗马数字Ⅻ
的字符),以及与12
(\p{Other_Alphabetic}
)匹配的其他一些符号。
将\p{OAlpha}
修饰符与正则表达式结合使用时,有一些注意事项:
u
之类的Unicode代码点转义序列通过代码点指定字符。普通的Unicode转义字符,例如\u{1F42A}
仅具有四个十六进制数字范围(等于基本的多语言平面)(source)\u03B1
标志编译的模式的转义要求更为严格:您不能转义任何特殊字符,只能转义实际上可以表现为特殊字符的字符。参见HTML input pattern not working。