首页  >  文章  >  后端开发  >  密码规则正则匹配,另外问题:为什么正则表达式效率低?

密码规则正则匹配,另外问题:为什么正则表达式效率低?

WBOY
WBOY原创
2016-08-26 10:12:521285浏览

规则如下:
密码格式:6-16位数字字母组合
不包含特殊字符。
必须同时包含数字、大写字母,小写字母3种字符,区分大小写。
连续3位及以上数字不能连续(例如123、876)
连续3位及以上的字母不能连续(例如abc、cba、aaa、111、AAA)

<code>echo !preg_match('/\d{3,}|[a-zA-Z]{3,}/', $password);
echo preg_match('/\d+/', $password);
echo preg_match('/[a-z]+/', $password);
echo preg_match('/[A-Z]+/', $password);
echo preg_match('/^([a-zA-Z0-9]){6,16}$/', $password);
</code>

以上是需求和我想出来的解决方法

但是总想能用更简洁的方式来匹配出来,希望有人能有更好的思路。

再问个问题:为什么正则表达式效率低?

因为连续的数字,字母用正则表达式判断太复杂而且效率低,所以采用逻辑代码判断的方式,一下是我用PHP写的代码,php5.5.12 初步测试成功。

<code>/**
 * 密码格式:6-16位数字字母组合
 * 不包含特殊字符。
 * 必须同时包含数字、大写字母,小写字母3种字符,区分大小写。
 * 连续3位及以上数字不能连续(例如123、876)
 * 连续3位及以上的字母不能连续(例如abc、cba)
 * @param string $password
 * @return boolean 是否匹配
 */
function CheckPassword($password){
    if (strlen($password) > 16 || strlen($password) </code>
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn