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日

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)