如何使用匹配(regex)验证用户名?

时间:2016-09-15 05:40:24

标签: regex firebase firebase-authentication firebase-security

我正在尝试将以下表达式放入匹配函数中,但在尝试编译规则时我猜错了。

.validate

".validate": "newData.val() === auth.uid && newData.val().matches(^(?=.{5,10}$)(?!.*[._-]{2})[a-z][a-z0-9._-]*[a-z0-9]$)" 规则如下:

" Invalid escape: '\.'"

我明白了:

{{1}}

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-z0-9符号
  • ([._-][a-z0-9]+)* - ._-后跟一个或多个(这需要[a-z0-9]如果._范围内有-0-9a-z字符串,那么结尾
  • $ - 字符串锚的结束。

请注意,您不需要转义字符类中的字符,因为._不是特殊字符,而-位于字符结尾或开头括号表达式(字符类)是一个文字连字符。