标签:字符 匹配 正则表达式 字母 001 满足 使用 表达式
一、限定密码长度和复杂程度的正则
至少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,所以必须加上.*来跳过不满足的字符。
标签:字符,匹配,正则表达式,字母,001,满足,使用,表达式 来源: https://www.cnblogs.com/whalesea/p/10839946.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。