Firebase实时数据库安全规则正则表达式:.matches()不接受普通的Javastring正则表达式

ogq8wdun  于 2022-11-25  发布在  Java
关注(0)|答案(1)|浏览(115)

我有一个正则表达式:/^(?=[^A-Za-z]*([A-Za-z][^A-Za-z]*){6}$)\w+$/
但是它在validate的matches()中不被接受。显示无效字符和其他类似的错误。

"$username": {
        // here
        ".validate": "$username.matches(/^(?=[^A-Za-z]*([A-Za-z][^A-Za-z]*){6}$)\w+$/)",
        ".write": "(auth.uid != null && newData.val() === auth.uid) || (auth != null && !newData.exists())"
}

要使表达式在规则中被接受,需要对表达式进行哪些更改?

zxlwwiss

zxlwwiss1#

查看此页,似乎不支持Firebase Security Rules Regular Expressions lookarounds和非捕获组。
您可以编写不带任何lookaround的模式,重复捕获组6次,并且只使用\w,因为它只允许匹配:

^\w*([A-Za-z]\w*){6}$

模式匹配:

  • ^字符串开头
  • \w*匹配可选前导字字符
  • ([A-Za-z]\w*){6}匹配6次字符A-Z a-z,后跟可选的尾随字字符
  • $字符串结束

请参见regex demo
最后的工作命令显示注解:

".validate": "$username.matches(/^\\w*([A-Za-z]\\w*){6,}$/)",

相关问题