用正则表达式写强密码

题目:强密码验证【必须包含大小写字母和数字组合,不能有特殊字符,长度8-10】

查了资料都是用正则断言写的。譬如:
(?!^\d+$)(?!^[a-zA-Z]+$).{8,}

我就是不明白为什么 前面两个()里为什么要这样写 为什么要写在前面两个位置。

<?exp反前瞻不是针对匹配 后面 跟的不是exp的位置。这里后面在这里代表什么意思

求帮忙分析一下

阅读 4.4k
1 个回答

先上可视化分析图,(?! 代表零宽度否定断言,只有表达式不符合右侧到 )位置的时候才继续匹配,否则终止.

所以第一个的意思是,检测到从行开始到行结束只有数字(你的表达式d前面漏了)的情况下,则中止匹配,即直接不通过匹配
同理第二个的意思是,检测从行开始到行结束只有字母的情况下终止匹配

在满足前面两个条件的情况下,任意字符超过7次以上则满足匹配

clipboard.png

另此表达式应该并不正确,如果只要满足题意那么应该只需要:

^[\w\d]{8,10}$
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题