/(^[a-zA-Z]+-?[a-zA-Z0-9]+){5,15}$/g
正则表达式条件
匹配长度必须在6到16个字符(包括16个字符)之间
必须仅以字母开头
必须包含字母,数字和一个可选的连字符
不得以连字符
上述正则表达式不满足所有4个条件。尝试将^
移到组前,并省略+
量词,但不起作用
答案 0 :(得分:2)
所有你需要的
^(?i)(?=.{6,16}$)(?!.*-.*-)[a-z][a-z\d-]*\d[a-z\d-]*(?<!-)$
可读
^
(?i)
(?= .{6,16} $ ) # 6 - 16 chars
(?! .* - .* - ) # Not 2 dashes
[a-z] # Start letter
[a-z\d-]* # Optional letters, digits, dashes
\d # Must be digit
[a-z\d-]* # Optional letters, digits, dashes
(?<! - ) # Not end in dash
$
好吧,至少我的正则表达式强制显示一个数字。
答案 1 :(得分:1)
您是在已经具有量化子图案的组上设置限制量词,因此,长度限制将不起作用。
要设置长度限制,请在(?=.{6,16}$)
之后添加^
前瞻,然后随时设置消费模式。
您可以使用
/^(?=.{6,16}$)[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)?$/
请参见regex demo。请注意,针对正则表达式验证整个输入字符串时,请勿使用g
修饰符。
详细信息
^
-字符串的开头(?=.{6,16}$)
-允许/要求字符串输入中6至16个字符[a-zA-Z]
-一个字母作为第一个字符[a-zA-Z0-9]*
-0+个字母数字字符(?:-[a-zA-Z0-9]+)?
--
的可选序列,然后是1+个字母数字字符$
-字符串的结尾。