^(?=.*[-_.]?)[a-z][a-z0-9-_.]{1,13}[a-z0-9]$
[-_.]
。[-_.]
是可选的,但在使用时只能在整个字符串中出现ONCE。 我在最后一个要点上遇到了麻烦。
尝试使用(?=.*[-_.]?)
进行预测并确保每当使用[-_.]
时,它应该只发生一次。但它似乎不起作用,因为当我使用类似a__-bc34
或a.b_c-d
的字符串进行测试时,它匹配,但它应该只允许a_bc34
之类的内容。
高级正则表达不是我最强的,所以我很感激任何帮助!
答案 0 :(得分:5)
I'do:
^(?=.{3,15}$)[a-z][a-z0-9]*[-_.]?[a-z0-9]+$
<强>解释强>
^ : start of string
(?=.{3,15}$) : lookahead, assumes there is from 3 to 15 character
[a-z] : a letter
[a-z0-9]* : 0 or more alphanum
[-_.]? : optional -, _ or .
[a-z0-9]+ : 1 or more alphanum
$ : end of string
答案 1 :(得分:2)
试试这个:
^(?!([^-_.]*[-_.]){2})[a-z][\w.-]{1,13}[a-z0-9]$
&#34;可选但最多一次&#34;在逻辑上等同于&#34;不是两次&#34;,(?!([^-_.]*[-_.]){2})
就是这个。
其余的是您的表达,但使用\w
进行了简化,与[a-zA-Z0-9_]
相同。
此外,将这样的限制放在预测中意味着您可以通过添加更多的前瞻功能轻松添加更多此类限制。这比将需求烘焙到核心表达式更好。