密碼規則正則匹配,另外問題:為什麼Regex效率低?

來源:互聯網
上載者:User
規則如下:
密碼格式:6-16位元字字母組合
不包含特殊字元。
必須同時包含數字、大寫字母,小寫字母3種字元,區分大小寫。
連續3位及以上數字不能連續(例如123、876)
連續3位及以上的字母不能連續(例如abc、cba、aaa、111、AAA)

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);

以上是需求和我想出來的解決方案

但是總想能用更簡潔的方式來匹配出來,希望有人能有更好的思路。

再問個問題:為什麼Regex效率低?

因為連續的數字,字母用Regex判斷太複雜而且效率低,所以採用邏輯代碼判斷的方式,一下是我用PHP寫的代碼,php5.5.12 初步測試成功。

/** * 密碼格式:6-16位元字字母組合 * 不包含特殊字元。 * 必須同時包含數字、大寫字母,小寫字母3種字元,區分大小寫。 * 連續3位及以上數字不能連續(例如123、876) * 連續3位及以上的字母不能連續(例如abc、cba) * @param string $password * @return boolean 是否匹配 */function CheckPassword($password){    if (strlen($password) > 16 || strlen($password) < 6) {        return false;    }    // ASCII code vallue    $upperLetter = range(65, 90);    $lowerLetter = range(97, 122);    $number = range(48, 57);    $includeNumber = false;    $includeUpperLetter = false;    $includeLowerLetter = false;    $continuousCharNum = 0;    for ($i=0; !empty($password[$i]); $i++) {        // 特殊字元        if (!in_array(ord($password[$i]), array_merge($upperLetter, $lowerLetter, $number))) {            return false;        }        // 大寫字母        if (!$includeUpperLetter && in_array(ord($password[$i]), $upperLetter)) {            $includeUpperLetter = true;        }        // 數字        if (!$includeNumber && in_array(ord($password[$i]), $number)) {            $includeNumber = true;        }        // 小寫字母        if (!$includeLowerLetter && in_array(ord($password[$i]), $lowerLetter)) {            $includeLowerLetter = true;        }        if ($i != 0 && !empty($password[$i+1])            && abs(ord($password[$i]) - ord($password[$i-1])) <= 1 && ord($password[$i]) - ord($password[$i-1]) == ord($password[$i+1]) - ord($password[$i])) {            return false;        }    }    if ($includeLowerLetter && $includeNumber && $includeUpperLetter) {        return true;    } else {        return false;    }}
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.