优化正则表达式

时间:2017-10-11 07:18:23

标签: regex

我要求密码必须包含一个大写,小写,数字和特殊字符。密码长度应为6到10个字符。在此基础上我写了一个正则表达式,但看起来很冗长。我可以为它应用一些优化逻辑吗?

\A(?=[\w@=]{6,10}\z)(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[@=])

另一方面,我可以在正则表达式中使用逻辑AND类型的概念吗?请帮忙

1 个答案:

答案 0 :(得分:3)

你可以使用对比和锚的原理:

(?=[^A-Z]*[A-Z])     # one UPPERCASE
(?=[^a-z]*[a-z])     # one lowercase
(?=\D*\d)            # one digit
(?=[^!"§$%]*[!"§$%]) # one symbol
^.{6,10}$            # 6-10 characters

如您所见,它遵循规则

(?=[not this]{zero or more times}[this]{once})

并且可能比.*快几倍 但是对于n个要求,你需要n-1个前瞻和一个匹配机制 请参阅a demo on regex101.com