导航栏: 首页 评论列表

正则预查的应用

默认分类 2020/09/16 10:44

要求用一个正则表达式实现:

由8到30位组成:必须包括1个大写字母,1个小写字母,1个数字,1个特殊字符,其中特殊符号包括!@#$%&*

开始想到可以用两个正则来实现,一个根据排列来校验规则,一个来校验长度:

/^(.*[A-Z]+.*[a-z]+.*\d+.*[\!@#$%&\*]+.*|.*[A-Z]+.*[a-z]+.*[\!@#$%&\*]+.*\d+.*|.*[A-Z]+.*\d+.*[a-z]+.*[\!@#$%&\*]+.*|.*[A-Z]+.*\d+.*[\!@#$%&\*]+.*[a-z]+.*|.*[A-Z]+.*[\!@#$%&\*]+.*[a-z]+.*\d+.*|.*[A-Z]+.*[\!@#$%&\*]+.*\d+.*[a-z]+.*|.*[a-z]+.*[A-Z]+.*\d+.*[\!@#$%&\*]+.*|.*[a-z]+.*[A-Z]+.*[\!@#$%&\*]+.*\d+.*|.*[a-z]+.*\d+.*[A-Z]+.*[\!@#$%&\*]+.*|.*[a-z]+.*\d+.*[\!@#$%&\*]+.*[A-Z]+.*|.*[a-z]+.*[\!@#$%&\*]+.*[A-Z]+.*\d+.*|.*[a-z]+.*[\!@#$%&\*]+.*\d+.*[A-Z]+.*|.*\d+.*[A-Z]+.*[a-z]+.*[\!@#$%&\*]+.*|.*\d+.*[A-Z]+.*[\!@#$%&\*]+.*[a-z]+.*|.*\d+.*[a-z]+.*[A-Z]+.*[\!@#$%&\*]+.*|.*\d+.*[a-z]+.*[\!@#$%&\*]+.*[A-Z]+.*|.*\d+.*[\!@#$%&\*]+.*[A-Z]+.*[a-z]+.*|.*\d+.*[\!@#$%&\*]+.*[a-z]+.*[A-Z]+.*|.*[\!@#$%&\*]+.*[A-Z]+.*[a-z]+.*\d+.*|.*[\!@#$%&\*]+.*[A-Z]+.*\d+.*[a-z]+.*|.*[\!@#$%&\*]+.*[a-z]+.*[A-Z]+.*\d+.*|.*[\!@#$%&\*]+.*[a-z]+.*\d+.*[A-Z]+.*|.*[\!@#$%&\*]+.*\d+.*[A-Z]+.*[a-z]+.*|.*[\!@#$%&\*]+.*\d+.*[a-z]+.*[A-Z]+.*)$/

和 /^.{8,30}$/.test('121212aza2323232322222222222222z')

后来发现太长了,想起或许可以用反向预查来试试,结果还没开始写,群里一位优秀的年轻人就写出来了,果然自古青年出才俊,赞!

代码如下:

/^(?=.*\d.*)(?=.*[a-z].*)(?=.*[A-Z].*)(?=.*[\!@#$%&\*].*).{8,30}$/.test('A1a!112211')


>> 留言评论