haoyuan2012 2017-09-15 00:44 采纳率: 0%
浏览 10696
已结题

至少包括字母数字特殊字符中任意2种的正则表达式

/(?!^(\d+|[a-zA-Z]+|[~!@#$%^&*?]+)$)^[\w~!@#$%^&*?]{7,20}$/
这个正则表达式规定了必须包括字母数字特殊字符中任意2种组合,这个表达式是从网上找的,经过测试是可以用的,但是看不懂什么意思,请高手给予解析、指点!

  • 写回答

7条回答

  • 我不喜欢这个世界 2017-09-15 04:12
    关注

    我先给你举个例子,比如9Asb123456这个密码段。
    你用第一部分匹配出来的是9
    第二部分匹配了9Asb123456(也就是所有)
    为什么这样能实现呢?
    原因是这样的:
    首先你要求的条件是至少匹配两个不同的字符类型。
    也就是说你的第一部分匹配出的9表示第一种字符数字,
    这时候就证明你的字符串9后面是其他字符
    也就说明了我检查出来9这个数字,就可以确认密码段含有两种类型了,
    (不管9后面有多少种类型,它目前已经至少满足是两种类型了)
    这时候结合你的第二部分匹配,,检查是否位数足够,检查9后面的是否有非法字符类型,比如空格
    就可以证明了9Asb123456是合格的

    还有一个问题?
    如果我把密码段改成123456789
    你的第一部分匹配到的就是123456789整个数字类型,第一部分通过
    第二部分匹配的结果也是123456789,这时候满足了位数,并不满足类型
    所以你还要有个判断,你的第一部分匹配结果得到的长度不能和第二部分匹配结果得到的长度相同。

    评论

报告相同问题?

问题事件

  • 请选择合适的标签 12月14日

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况