我有以下正则表达式,只允许使用字母:
/[a-zA-Z]+/
a = "abcDF"
if (a.match(/[a-zA-Z]+/) == a){
//Match
}else{
//No Match
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能使用p {L}(通用 - 任何语言,如德语,英语等...)
我尝试了什么:
a.match(/[p{l}]+/)
a.match(/[\p{l}]+/)
a.match(/p{l}/)
a.match(/\p{l}/)
Run Code Online (Sandbox Code Playgroud)
但是所有字母a ="aB"都返回null
Tim*_*ker 14
从ECMAScript 2018开始,JavaScript最终本身支持Unicode属性转义.
对于旧版本,您需要自己定义所有相关的Unicode范围.或者您可以使用XRegExp带有Unicode附加组件的 Steven Levithan 软件包并利用其Unicode属性快捷方式:
var regex = new XRegExp("^\\p{L}*$")
var a = "abcäöüéèê"
if (regex.test(a)) {
// Match
} else {
// No Match
}
Run Code Online (Sandbox Code Playgroud)
如果你愿意使用Babel来构建你的javascript,那么我发布了一个babel-plugin,它会将正则表达式转换为正常表达式,/^\p{L}+$/或者/\p{^White_Space}/转换成浏览器会理解的正则表达式.
这是项目页面:https://github.com/danielberndt/babel-plugin-utf-8-regex
您可以\\p{L}与现代 ECMAScript 2018+兼容的 JavaScript 环境一起使用,但您需要记住,仅当您传递修饰符/标志时才支持 Unicode 属性类u:
a.match(/\\p{L}+/gu)\na.match(/\\p{Alphabetic}+/gu)\nRun Code Online (Sandbox Code Playgroud)\n将匹配字符串中所有出现的 1 个或多个 Unicode 字母a。
请注意,\\p{Alphabetic}( \\p{Alpha}) 包括与 匹配的所有字母\\p{L},加上与匹配的字母数字\\p{Nl}(例如\xe2\x85\xab\xe2\x80\x93 罗马数字的字符),以及与( )12匹配的一些其他符号。\\p{Other_Alphabetic}\\p{OAlpha}
u在将修饰符与正则表达式一起使用时,需要记住一些事项:
\\u{1F42A}通过代码点指定字符。正常的 Unicode 转义,例如\\u03B1只有四个十六进制数字的范围(等于基本的多语言平面)(来源)u更加严格:您不能转义任何特殊字符,只能转义那些实际上可以充当特殊字符的字符。请参阅HTML 输入模式不起作用。