首页 > 其他 > 详细

正则表达式的使用

时间:2019-05-09 19:32:50      阅读:140      评论:0      收藏:0      [点我收藏+]

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

  至少8位长度,至少使用数字、字母、特殊字符中的两种:

  ^(?=.*[a-zA-Z0-9])(?=.*[a-zA-Z\\W])(?=.*[0-9\\W]).{8,}$

  解析:

    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,所以必须加上.*来跳过不满足的字符。

    

    

    

正则表达式的使用

原文:https://www.cnblogs.com/whalesea/p/10839946.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!