パスワードの正規表現を使ったチェック

とりあえず、パスワードのチェック用の関数をメモ
正規表現で書いてみた
なお、記号を使う場合は考慮してない


check_gはかなり冗長なので別の方法を考えた方が良い
おそらく、通常使うのはcheck_hかcheck_iあたりだと思われる。


//全て許可
function check_a($password) {
        return true;
}

//数字だけを含む文字列を許可
function check_b($password) {
    $check_str1 = '(^([0-9])+$)';
    if (preg_match($check_str1, $password) != 0 ) {
        return true;
    }
    return false;
}

//英子文字だけを含む文字列を許可
function check_c($password) {
    $check_str1 = '(^([a-z])+$)';
    if (preg_match($check_str1, $password) != 0 ) {
        return true;
    }
    return false;
}

//英大文字だけを含む文字列を許可
function check_d($password) {
    $check_str1 = '(^([A-Z])+$)';
    if (preg_match($check_str1, $password) != 0 ) {
        return true;
    }
    return false;
}

//数字または、英子文字または、英大文字のいずれかを含む文字列を許可
function check_e($password) {
    $check_str1 = '(^([0-9]|[a-z]|[A-Z])+$)';
    if (preg_match($check_str1, $password) != 0 ) {
        return true;
    }
    return false;
}

//数字および英字のいずれも含む文字列を許可
function check_f($password) {
    $check_str1 = '( (^[0-9]+([0-9]|[a-z]|[A-Z])*([a-z]|[A-Z])+([0-9]|[a-z]|[A-Z])*$) '.
                  '| (^([a-z]|[A-Z])+([0-9]|[a-z]|[A-Z])*[0-9]+([0-9]|[a-z]|[A-Z])*$) )';
    if (preg_match($check_str1, $password) != 0 ) {
        return true;
    }
    return false;
}

//数字および英子文字および、英大文字のいずれも含む文字列を許可
function check_g($password) {
    $check_str1 = '( (^[0-9]+([0-9]|[a-z]|[A-Z])* [a-z]+([0-9]|[a-z]|[A-Z])* [A-Z]+([0-9]|[a-z]|[A-Z])*$) '.
                  '| (^[0-9]+([0-9]|[a-z]|[A-Z])* [A-Z]+([0-9]|[a-z]|[A-Z])* [a-z]+([0-9]|[a-z]|[A-Z])*$) '.
                  '| (^[a-z]+([0-9]|[a-z]|[A-Z])* [0-9]+([0-9]|[a-z]|[A-Z])* [A-Z]+([0-9]|[a-z]|[A-Z])*$) '.
                  '| (^[a-z]+([0-9]|[a-z]|[A-Z])* [A-Z]+([0-9]|[a-z]|[A-Z])* [0-9]+([0-9]|[a-z]|[A-Z])*$) '.
                  '| (^[A-Z]+([0-9]|[a-z]|[A-Z])* [0-9]+([0-9]|[a-z]|[A-Z])* [a-z]+([0-9]|[a-z]|[A-Z])*$) '.
                  '| (^[A-Z]+([0-9]|[a-z]|[A-Z])* [a-z]+([0-9]|[a-z]|[A-Z])* [0-9]+([0-9]|[a-z]|[A-Z])*$) )';
    if (preg_match($check_str1, $password) != 0 ) {
        return true;
    }
    return false;
}

//数字および英子文字および、英大文字のいずれも含む文字列を許可(分割版)
function check_g2($password) {
    $check_str1 = '(^.*([0-9]))';
    $check_str2 = '(^.*([a-z]))';
    $check_str3 = '(^.*([A-Z]))';
    if (preg_match($check_str1, $password) != 0 ) {
        if (preg_match($check_str2, $password) != 0 ) {
            if (preg_match($check_str3, $password) != 0 ) {
                return true;
            }
        }
    }
    return false;
}


//数字または、英子文字または、英大文字のいずれかを含む4〜8文字の文字列を許可
function check_h($password) {
    $check_str1 = '(^([0-9]|[a-z]|[A-Z]){4,8}$)';
    if (preg_match($check_str1, $password) != 0 ) {
        return true;
    }
    return false;
}

//数字および英子文字および、英大文字のいずれも含む4〜8文字の文字列を許可
function check_i($password) {

    $check_str1 = '(^([0-9]|[a-z]|[A-Z]){4,8}$)';
    $check_str2 = '(^.*([0-9]))';
    $check_str3 = '(^.*([a-z]))';
    $check_str4 = '(^.*([A-Z]))';
    if (preg_match($check_str1, $password) != 0 ) {
        if (preg_match($check_str2, $password) != 0 ) {
            if (preg_match($check_str3, $password) != 0 ) {
                if (preg_match($check_str4, $password) != 0 ) {
                    return true;
                }
            }
        }
    }
    return false;
}

正規表現チップス
http://www110.kir.jp/study/jissen/script49.html
ちなみにこのあたりなんかはかなり参考になる・・・

追記:冗長なcheck_gをcheck_iの用に分割したバージョンとしてcheck_g2を追加
評価回数は多くなるがこちらの方が読みやすい