我正在创建一个用于密码验证的正则表达式,以在 Java 应用程序中用作配置参数。
正则表达式是:
^.*(?=.{8,})(?=..*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$
密码策略是:
我只遗漏了第 5 点。我无法使用正则表达式检查空格、制表符、回车符等。
有人可以帮助我吗?
尝试这个:
^(?=.*[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
添加、修改或删除单个规则很容易,因为每个规则都是一个独立的“模块”。
The (?=.*[xyz])
构造吃掉整个字符串(.*
)并回溯到第一次出现的地方[xyz]
可以匹配。如果成功的话[xyz]
找到,否则失败。
另一种方法是使用不情愿的限定符:(?=.*?[xyz])
。对于密码检查,这几乎没有任何区别,对于更长的字符串,它可能是更有效的变体。
最有效的变体(但最难阅读和维护,因此最容易出错)是(?=[^xyz]*[xyz])
, 当然。对于这种长度的正则表达式并出于此目的,我强烈建议这样做,因为它没有真正的好处。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)