试试这个:^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\S+$).{8,}$
说明:^ # start-of-string(?=.*[0-9]) # a digit must occur at least once(?=.*[a-z])
# a lower case letter must occur at least once(?=.*[A-Z]) # an upper case letter must occur at least once(?=.*[@#$%^&+=])
# a special character must occur at least once(?=\S+$) # no whitespace allowed in the entire string.{8,}
# anything, at least eight places though
$ # end-of-string
添加、修改或删除单个规则很容易,因为每条规则都是一个独立的“模块”。
这个(?=.*[xyz])构造吃掉整个字符串(.*)和回溯到第一次出现[xyz]可以匹配。如果[xyz]被找到,否则就会失败。
另一种方法是使用不情愿的限定词:(?=.*?[xyz])..对于密码检查,这几乎没有什么区别,对于更长的字符串,它可能是更有效的变体。
最有效的变体(但最难阅读和维护,因此最容易出错)将是(?=[^xyz]*[xyz])当然了。为了这个长度和目的,我建议这样做,因为它没有真正的好处。