正向前瞻字符必须只出现一次并且是可选的

Kid*_*ond 3 regex

^(?=.*[-_.]?)[a-z][a-z0-9-_.]{1,13}[a-z0-9]$
Run Code Online (Sandbox Code Playgroud)
  • 必须以一封信开头.
  • 必须以字母或数字结尾.
  • 长度必须介于3到15个字符之间.
  • 可能只存在字母,数字和[-_.].
  • [-_.] 是可选的,但使用时必须只在整个字符串中出现ONCE.

我在最后一个要点上遇到了麻烦.

尝试使用(?=.*[-_.]?)前瞻并确保无论何时[-_.]使用它,它应该只发生一次.但它似乎不起作用,因为当我用类似的字符串测试它a__-bc34或a.b_c-d它匹配时,它应该只允许类似的东西a_bc34.

高级正则表达式不是我最强的,所以我很感激任何帮助!

Tot*_*oto 5

我做:

^(?=.{3,15}$)[a-z][a-z0-9]*[-_.]?[a-z0-9]+$
Run Code Online (Sandbox Code Playgroud)

说明:

^               : 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
Run Code Online (Sandbox Code Playgroud)