web-dev-qa-db-ja.com

パスワード検証を許可するためのpreg_matchを作成します(!@#$%)

パスワードを検証するためのpreg_match関数を作成したいのですが、次の特殊文字を使用できるように関数を記述する方法がわかりません:!@#$%

if(!preg_match(?????)$/', $password))

これが、正規表現に適用したいパスワードルールです。

  • 文字と数字を含めることができます
  • 少なくとも1つの数字と1つの文字を含む必要があります
  • 次の文字を含めることができます:!@#$%
  • 8〜12文字である必要があります

あなたが提供できるあらゆる助けをありがとう。

10
Mark Rummel

これは次のようになるはずです。

if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{8,12}$/', $password)) {
    echo 'the password does not meet the requirements!';
}

開始間-> ^
そして最後に-> $
文字列には少なくとも1つの数字が必要です-> (?=.*\d)
および少なくとも1つの文字-> (?=.*[A-Za-z])
これは、数字、文字、または次のいずれかである必要があります:!@#$%-> [0-9A-Za-z!@#$%]
8〜12文字である必要があります-> {8,12}

User557846があなたの質問にコメントしたので、私はあなたにもっと多くの文字を許可することをお勧めします、私は通常(私が最大を使用する場合)少なくとも50を取ります:)

ところで、あなたは見てみたいかもしれません この正規表現のチュートリアル

51
r3bel
preg_match('/^(?=.*\d)(?=.*[@#\-_$%^&+=§!\?])(?=.*[a-z])(?=.*[A-Z])[0-9A-Za-z@#\-_$%^&+=§!\?]{8,20}$/',$password)
  • 少なくとも1つの小文字
  • 少なくとも1つの大文字
  • 少なくとも1桁
  • @#-_ $%^&+ =§!の少なくとも1つの特殊記号
9
Thomas

私はr3belの答えが好きだったので、それをいじって、パスワードチェック機能として次のようになりました。

function password_strength_check($password, $min_len = 8, $max_len = 70, $req_digit = 1, $req_lower = 1, $req_upper = 1, $req_symbol = 1) {
    // Build regex string depending on requirements for the password
    $regex = '/^';
    if ($req_digit == 1) { $regex .= '(?=.*\d)'; }              // Match at least 1 digit
    if ($req_lower == 1) { $regex .= '(?=.*[a-z])'; }           // Match at least 1 lowercase letter
    if ($req_upper == 1) { $regex .= '(?=.*[A-Z])'; }           // Match at least 1 uppercase letter
    if ($req_symbol == 1) { $regex .= '(?=.*[^a-zA-Z\d])'; }    // Match at least 1 character that is none of the above
    $regex .= '.{' . $min_len . ',' . $max_len . '}$/';

    if(preg_match($regex, $password)) {
        return TRUE;
    } else {
        return FALSE;
    }
}

最大/最小の長さはデフォルトまたは調整可能であり、各要件はデフォルトでオンになっていますが、オフにすることができます。最後の要件が固定ではなく「上記のタイプのいずれでもないもの」になるように、すべてのシンボルをサポートしたいと思いました。シンボルのセット。

2
David Bell

私はもう少し複雑なチェックのための完全な正規表現を開発しました

/^(?=.*\d)(?=.*[A-Za-z])(?=.*[A-Z])(?=.*[a-z])(?=.*[ !#$%&'\(\) * +,-.\/[\\] ^ _`{|}~\"])[0-9A-Za-z !#$%&'\(\) * +,-.\/[\\] ^ _`{|}~\"]{8,50}$/

基本的に、パスワードが1桁、1つの大文字、1つの小文字、1つの特殊文字で構成されていることを確認します。これが正規表現を探している人に役立つことを願っています。

1
Morpheus_ro

私はこれを私のdrupal hook_form_validateここでは、パスワードは6文字の文字、数字、および少なくとも1つの特殊文字にする必要があります。

<?
if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[!@#$%])[0-9A-Za-z!@#$%]{6,15}$/', $form_state['values']['pass'])) {
    form_set_error('pass', t('Password must contain 6 characters of letters, numbers and at least one special character.'));
}
?>
0

別の方法

これとは違って見てみましょう。ユーザーはすべての [〜#〜] ascii [〜#〜] 有効な文字(32 < ascii_code < 127)をパスワードで使用でき、すべてをチェックする関数を作成したと思いますASCIIテーブルにある文字!

function check($pass, $i = 0){
     if(strlen($pass) > $i)
         return (0rd(pass[$i]) > 32 and 0rd(pass[$i]) < 127) and check($pass, $i + 1);
}

使用法

if(!check($_POST["password"])){
    echo "password is wrong";
}
0
Amir Forsati
if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[!@#$%])[0-9A-Za-z!@#$%]
{6,15}$/',($_POST['password']))) {
    $message='Password must contain 6 characters of letters, numbers and 
    at least one special character.';
}
0
bhupinder singh