我正在尝试验证username具有以下特征的字符串:
.或开头_..连续两个letter characters和numbers我的代码是 username.matches('^(?!\.)(?!_)(?!.*\.$)(?!.*?\.\.)[a-z0-9_.]+$')
在线使用正则表达式模拟器它正在工作
https://regex101.com/r/bDXMg3/2/
但是在Google RE2 语法中使用相同的语法(在Firestore 安全规则中使用)会引发大量错误
我试图然后双重逃避每个 .
使用代码 username.matches('^(?!\\.)(?!_)(?!.*\\.$)(?!.*?\\.\\.)[a-z0-9_.]+$')
它只显示一个错误(开头的红色 ^ 符号),但随后它给了我以下错误
Invalid regular expression pattern. Pattern: ^(?!\.)(?!_)(?!.*\.$)(?!.*?\.\.)[a-z0-9_.]+$.
Run Code Online (Sandbox Code Playgroud)
RE2 不支持前瞻(也不支持后视)。
但是,该模式可以在没有环顾的情况下重写:
^[a-z0-9][a-z0-9_]*([.][a-z0-9_]+)*$
Run Code Online (Sandbox Code Playgroud)
细节
^ - 字符串的开始[a-z0-9] - 一个字母或数字[a-z0-9_]* - 零个或多个小写字母、数字或下划线([.][a-z0-9_]+)* - 零个或多个序列
[.] - 一个点[a-z0-9_]+ - 一个或多个小写字母、数字或下划线$ - 字符串的结尾。| 归档时间: |
|
| 查看次数: |
2540 次 |
| 最近记录: |