正则表达式的使用

一、限定密码长度和保密程度的正则

  至少8位长度,至少使用数字、字母、特殊字符中的两种:^(?=.*[a-zA-Z0-9])(?=.*[a-zA-Z\W_])(?=.*[0-9\W]).{8,}$

  注:\w包含数字、字母、下划线,\W就不含下划线

    数字:[0-9]或\d

    字母:[a-zA-Z]

    字符:[\W_]

  解析:

    1、(?=pattern)的用法:表达式pattern只作为一个查询条件,类似于判断,并不是真正的表达式对字符串的匹配。

      例如:判断字符串是否包含001,匹配test001的正则表达式,应是:^test(?=001|002)001$,或^test(?=001|002).*$,即表达式要满足字符串的数量和字符类型的要求。

      

    2、当有多个(?=pattern1)(?=pattern2),表达式应但同时满足,即达到与的关系。但是,因为每个单独的子表达式里是或的关系,所以只需要满足每个表达式里的其中之一就行。

      本例中,既是:第一表达式字母数字集合,则表达式要么有字母有么有数字,至少一个;但同时也要满足第二个表达式字母-非数字、字母集合;并且满足第三个表达式数字-非字母数字集合。

      三个表达式相互影响,则达到目的-----至少两种字符。如果第一个子表达式有两种字符则已经满足我们的需求,同时也满足了第二、第三个子表达式;如何第一个第一个子表达式的匹配度只有两者的其中之一字符,字母或数字,那么,肯定不满足第二或第三个表达式,字符串将无法检测通过,结果既是false。

 

    3、长度的限定:因为(?=pattern)只是个判断条件,所以正真匹配的正则表达式是:.{8,},所以可以通过该子表达式进行长度限制。

 

    4、(?=.*[a-zA-Z\W_]),该子表达式中的.*的解读:由于该表达式的每个子表达式都是从头开始匹配(具体原因不做细述),所以当第一个字符无法满足该子表达式的匹配条件时即会产生false,所以必须加上.*来跳过不满足的字符。

 

    5、本例的条件是:数字、字母、特殊字符,三种中至少满足两种,用数学中的排列组合方式理解它。就有:在三种不同方式中任选两种的所有组合,将每种组合写出来,应是c(3,2),结果是3,每种组合都包含两种类型的密码。这种写法最终会因为标题2中的方式满足密码强度的要求;如果需要指定密码必须满足所有条件,而不是满足任意的写法:^(?=.*\d)(?=.*[a-zA-z])(?=.*[\W_]).{8,}$,这种的组合应是:三种不同方式选取任意一种进行组合,应是:c(3,1),结果也是3中组合,每种组合只包含一种密码;如果需要三种满足任意一种的写法:^(?=.*[a-zA-Z\d\W_]).{8,}$,这种组合应是:三种不同方式选取全部条件进行组合,应是:c(3,3)结果只有一种,每种组合包含全部密码。

    三种密码方式,总结一下:

          至少任意一种:^(?=[a-zA-Z\d\W_]).{8,}$  (一种的方式不需要加.*)

 

          至少任意两种:^(?=.*[a-zA-Z0-9])(?=.*[a-zA-Z\W_])(?=.*[0-9\W_]).{8,}$

 

          必须全部三种:^(?=.*\d)(?=.*[a-zA-z])(?=.*[\W_]).{8,}$

 

 

    6、如果需要在四种密码方式中任意满足几种的写法是什么,将字母中的大小写看成两种密码方式。在此,我们类比三种密码方式的写法,使用组合的方式的推导。首先比较容易想到的:必须满足四种中全部4种的组合方式,应该是c(4,1)=4,满足四种的任意1种的组合方式,应该是c(4,4)=1。以此来推导,那么满足四种中的任意3种的组合方式,应该是c(4,2)=6,满足四种中2种的组合方式,应该是c(4,3)=4。

      具体的写法:

          至少任意一种:^(?=[a-zA-Z\d\W_]).{8,}$  (跟三种一样)

          至少任意两种:^(?=.*[\da-zA-Z])(?=.*[\da-z\W_])(?=.*[\dA-Z\W_])(?=.*[a-zA-Z\W_]).{8,}$

          至少任意三种:^(?=.*[\da-z])(?=.*[\dA-Z])(?=.*[\d\W_])(?=.*[A-Z\W_])(?=.*[a-zA-Z])(?=.*[a-z\W_]).{8,}$

          必须全部四种:^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[\W_]).{8,}$

    

    7、按照这种思路,如果想写两张密码方式的组合,或者更多中的密码方式的组合,只需要按照规律即可。不过,四种密码应该已经是常用最多的了。

    

    

转载于:https://www.cnblogs.com/whalesea/p/10839946.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值