/^(?=.*\d)(?=.*[!@&.$#]).{7,16}$/
它应该允许7到16个字符,并且包含至少1个数字字符和1个特殊字符,并且不能以数字开头。我试过测试但它不起作用?
答案 0 :(得分:4)
我唯一认为“不起作用”,这是一个模糊的问题描述,说实话,它可以从一个数字开始。除此之外,它的工作方式如你所述。
修复如下:
/^(?=.*\d)(?=.*[!@&.$#])\D.{6,15}$/
一个简短的解释(如果你自己没有写正则表达式):
^ # match the beginning of the input
(?= # start positive look ahead
.* # match any character except line breaks and repeat it zero or more times
\d # match a digit: [0-9]
) # end positive look ahead
(?= # start positive look ahead
.* # match any character except line breaks and repeat it zero or more times
[!@&.$#] # match any character from the set {'!', '#', '$', '&', '.', '@'}
) # end positive look ahead
\D # match a non-digit: [^0-9]
.{6,15} # match any character except line breaks and repeat it between 6 and 15 times
$ # match the end of the input
答案 1 :(得分:2)
前两个条件已满足,但第三个条件(不得以数字开头)不是。因为.*
中的^(?=.*\d)
在第一个位置有一个数字时匹配。
请改为尝试:
/^(?=\D+\d)(?=.*[!@&.$#]).{7,16}$/
此处\D
(除了数字之外的任何内容)确保在开头至少有一个非数字字符。