检查密码格式

时间:2012-11-22 07:52:35

标签: php

如何检查用户输入的密码格式。字符串不重复和使用用户必须选择数字,字符串(小写/大写)

听到我的代码。我在preg_match中的问题是什么?

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

5 个答案:

答案 0 :(得分: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;
  }

答案 1 :(得分:0)

我认为[a-A]意味着您只允许小额资本A。这应该是[a-zA-Z]。您也可以尝试[a-Z],但在C#中,例如这不能按预期工作。

此外,您可能需要说“多个字母后跟多个号码”:[a-zA-Z]+[0-9]+。这样就可以使用abDCkl98等密码。

如果你想混合字母和数字,你应该做[a-zA-Z0-9]+之类的事情。这适用于a9Bdc4re等密码。

答案 2 :(得分:0)

试试这个:

preg_match("/^[a-zA-Z0-9]+$/", $password)

答案 3 :(得分:0)

按照你的例子,这是另一个选择:

"/[:alpha:][:digit:]/"

答案 4 :(得分:0)

Try out this
$pattern = "/^[a-zA-Z0-9]*$/i";
if(preg_match($pattern, $value)){           
   return true;
}else{
   return false;
}