PHP密码检查器

时间:2014-02-19 01:54:31

标签: php passwords

我使用PHP编写了一个密码检查程序,它工作正常。它由许多“if else”组成。有没有办法在我的代码中最小化我对“if else”的使用?

function passtest($pass) {
            if (!empty($pass)) { //check if string is empty
                if (ctype_alnum($pass)) { //check if string is alphanumeric
                    if (7 < strlen($pass)){ //check if string meets 8 or more characters
                        if (strcspn($pass, '0123456789') != strlen($pass)){ //check if string has numbers
                            if (strcspn($pass, 'abcdefghijklmnopqrstuvwxyz') != strlen($pass)) { //check if string has small letters
                                if (strcspn($pass, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') != strlen($pass)) { //check if string has capital letters
                                    return "<br />Password passed";
                                }
                                else {
                                    return "<br />No capital letter";
                                }
                            }
                            else {
                                return "<br />No small letter";
                            }
                        }
                        else {
                            return "<br />No number";
                        }
                    }
                    else {
                        return "<br />Password is short";
                    }
                }
                else {
                    return "<br />Password has special character";
                }
            }
            else {
                return "<br />Password field is empty";
            }
        }

3 个答案:

答案 0 :(得分:2)

xkcd
&GT; xkcd

您的功能应该只是测试是否输入了密码。除此之外,它不是告诉人们他们能够和不能用于密码的地方。例如,黑客知道我的密码需要多长时间才能获得神奇宝贝?这个特殊的角色是一个巨大的熵助推器。

除此之外,要真正回答你的问题,请尝试以否定的方式制定你的陈述:

if( empty($pass)) return "<br />Password field is empty";
if( !ctype_alnum($pass)) return "<br />Password has special character":
// ...

这样做有一个方便的副作用,即将错误消息保持在它们所代表的条件旁边。

答案 1 :(得分:0)

使用if elseif else声明。

function passtest($pass) {   
  if (empty($pass)){ //check if string is empty
    return "<br />Password field is empty";
  }elseif (!ctype_alnum($pass)){ //check if string is alphanumeric
    return "<br />Password has special character";
  }elseif (strlen($pass) < 8) { //check if string meets 8 or more characters
    return "<br />Password is short";
  }elseif (strspn($pass, '0123456789') != strlen($pass)){ //check if string has numbers
    return "<br />No number";
  }elseif (strspn($pass, 'abcdefghijklmnopqrstuvwxyz') != strlen($pass)) { //check if string has small letters
    return "<br />No small letter";
  }elseif (strspn($pass, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') != strlen($pass)) { //check if string has capital letters
    return "<br />No capital letter";
  }else{
    return "<br />Password passed";
  }
}

答案 2 :(得分:0)

如果你关心使用if else语句而不关心可读性,你可以一起避免它们。

function passtest($pass) {
    return !empty($pass) ? ctype_alnum($pass) ? 7 < strlen($pass) ? strcspn($pass, '0123456789') != strlen($pass) ? strcspn($pass, 'abcdefghijklmnopqrstuvwxyz') != strlen($pass) ? strcspn($pass, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') != strlen($pass) ? "<br />Password passed" : "<br />No capital letter" : "<br />No small letter" : "<br />No number" : "<br />Password is short" : "<br />Password has special character" : "<br />Password field is empty";
}
相关问题