0

ユーザーが入力したパスワード形式を確認する方法。string not duplicate and use user must be choose numbers , strings (小文字/大文字)

私のコードを聞いてください。preg_matchで私の問題は何ですか?

function checkPassFormat($ip)
{
    if(preg_match('/^[a-A][0-9]/', $password))
        return TRUE;
    else 
        return FALSE;
}
4

5 に答える 5

1

これは問題のかわいい解決策だと思います(エラーを収集して、ユーザーにわかりやすいメッセージを表示することもできます):

const SECURELEVEL_LOW = 1;
const SECURELEVEL_MEDIUM = 2;
const SECURELEVEL_HIGH = 3;
const SECURELEVEL_SERVICE = 4;

const CONTAINS_LETTERS = 1;
const CONTAINS_DIGITS = 2;
const CONTAINS_CASESENSITIVELETTERS = 4;
const CONTAINS_SPECIALCHARS = 8;

public function _isValid($value) {
    $valid = true;
    switch ($this->_options['secureLevel']) {
      case self::SECURELEVEL_SERVICE:
        $minLength = 20;
        $hasToContain = self::CONTAINS_LETTERS + self::CONTAINS_DIGITS + self::CONTAINS_CASESENSITIVELETTERS + self::CONTAINS_SPECIALCHARS;
        break;
      case self::SECURELEVEL_HIGH:
        $minLength = 8;
        $hasToContain = self::CONTAINS_LETTERS + self::CONTAINS_DIGITS + self::CONTAINS_CASESENSITIVELETTERS;
        break;
      case self::SECURELEVEL_LOW:
        $minLength = 4;
        $hasToContain = 0;
        break;
      case self::SECURELEVEL_MEDIUM:
      default:
        $minLength = 5;
        $hasToContain = self::CONTAINS_LETTERS + self::CONTAINS_DIGITS;
        break;
    }

    if (strlen($value) < $minLength) {
      $valid = false;
    }
    if (strpos($value, ' ') !== false) {
      $valid = false;
    }


    if ($hasToContain & self::CONTAINS_LETTERS) {
      // Password has to contain letters
      if (!preg_match('/[a-z]/i', $value)) {
        $valid = false;
      }
    }

    if ($hasToContain & self::CONTAINS_DIGITS) {
      // Password has to contain numbers
      if (!preg_match('/[0-9]/', $value)) {
        $valid = false;
      }
    }

    if ($hasToContain & self::CONTAINS_CASESENSITIVELETTERS) {
      // Password has to contain small and capital letters
      if (!preg_match('/[a-z]/', $value) || !preg_match('/[A-Z]/', $value)) {
        $valid = false;
      }
    }

    if ($hasToContain & self::CONTAINS_SPECIALCHARS) {
      // Password has to contain a special character
      if (!preg_match('/[^0-9a-zA-Z]/', $value)) {
        $valid = false;
      }
    }

    return $valid;
  }
于 2012-11-22T08:08:44.403 に答える
0

[a-A]small と capital のみを許可していることを意味すると思いますA。これはおそらく[a-zA-Z]. を試すこともできますが[a-Z]、たとえば C# では期待どおりに動作しません。

また、おそらく「複数の文字の後に複数の数字が続く」と言う必要があります: [a-zA-Z]+[0-9]+. これにより、のようなパスワードが可能になりますabDCkl98

文字と数字を混ぜたい場合は、 のようにする必要があります[a-zA-Z0-9]+。これは、 のようなパスワード用ですa9Bdc4re

于 2012-11-22T07:54:32.233 に答える
0

これを試して:

preg_match("/^[a-zA-Z0-9]+$/", $password)
于 2012-11-22T07:56:26.623 に答える
0

あなたの例に従って、別のオプションがあります:

"/[:alpha:][:digit:]/"
于 2012-11-22T07:56:31.693 に答える
0
これを試してみてください
$pattern = "/^[a-zA-Z0-9]*$/i";
if(preg_match($パターン, $値)){           
   true を返します。
}そうしないと{
   false を返します。
}
于 2012-11-22T07:59:27.300 に答える