【发布时间】:2019-01-30 07:09:36
【问题描述】:
我正在尝试验证具有以下特征的 username 字符串:
- 不以
.或_开头 - 不以
.结尾 - 不允许连续出现两个
. - 仅小写
letter characters和numbers
我的代码是username.matches('^(?!\.)(?!_)(?!.*\.$)(?!.*?\.\.)[a-z0-9_.]+$')
在线使用正则表达式模拟器可以正常工作
https://regex101.com/r/bDXMg3/2/
但是在 Google RE2 语法(用于 Firestore Security Rules)中使用相同的语法会引发大量错误
然后我尝试对每个 . 进行双重转义
使用代码username.matches('^(?!\\.)(?!_)(?!.*\\.$)(?!.*?\\.\\.)[a-z0-9_.]+$')
它只显示一个错误(开头的红色 ^ 符号),但它给了我下面的错误
Invalid regular expression pattern. Pattern: ^(?!\.)(?!_)(?!.*\.$)(?!.*?\.\.)[a-z0-9_.]+$.
谁能告诉我我做错了什么?
【问题讨论】:
-
如果真的是 RE2 正在解析这个模式,那么很明显 - 它不支持前瞻/后瞻。实际上,您应该使用
/^[a-z0-9]+([_.][a-z0-9]+)*$/ -
或者,如果我的规则正确,
'^[a-z0-9][a-z0-9_]*([.][a-z0-9_]+)*$' -
谢谢。似乎工作。如果您添加作为对原始问题的回复,我可以将其标记为已接受的答案
-
附有解释。