我正在尝试将以下表达式放入匹配函数中,但在尝试编译规则时我猜错了。
.validate
".validate": "newData.val() === auth.uid
&& newData.val().matches(^(?=.{5,10}$)(?!.*[._-]{2})[a-z][a-z0-9._-]*[a-z0-9]$)"
规则如下:
" Invalid escape: '\.'"
我明白了:
{{1}}
答案 0 :(得分:1)
您似乎无法在Firebase中使用外观,因此应调整您的模式和整个方法以解决此问题。
您当前的正则表达式需要5到10个符号的字符串长度,并且不允许连续2个符号.
,_
和-
。应该在正则表达式之外检查第一个条件,使用一些代码,如newData.val().length >= 5 && newData.val().length <= 10
,第二个条件只需要重新分组和重新量化:
.matches(/^[a-z][a-z0-9]*([._-][a-z0-9]+)*$/)
请参阅正则表达式demo。
<强>详情:
^
- 字符串开头[a-z]
- 小写字母(如果您在末尾添加/i
,则会区分大小写)[a-z0-9]*
- 零个或多个a-z
和0-9
符号([._-][a-z0-9]+)*
- .
,_
或-
后跟一个或多个(这需要[a-z0-9]
如果.
和_
范围内有-
,0-9
或a-z
字符串,那么结尾$
- 字符串锚的结束。请注意,您不需要转义字符类中的字符,因为.
和_
不是特殊字符,而-
位于字符结尾或开头括号表达式(字符类)是一个文字连字符。