正则表达式如何跳过PHP中的空值

时间:2017-02-25 06:32:50

标签: php regex

我正在做一个用于生成随机4个字母密码的小程序。 我已经实现的是每次刷新页面时,它都会使用正则大写和小写字母以及使用正则表达式的整数给出正好4个字母的密码。

我现在试图解决的问题是有时候没有给出一个东西......好的

我要求解决如何跳过空值的问题。

$str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$pass=array();
$length=strlen($str)-1;
for($i=0;$i<4;$i++){
    $index=rand(0,$length);
    $pass[]=$str[$index];
}
$nPass=implode($pass);
echo "Password could be: ";

foreach($pass as $val){
    if(preg_match("/[a-z]/",$nPass)&&preg_match("/[A-Z]/",$nPass)&&preg_match("/[0-9]/",$nPass)){
        echo $val;
    }elseif(empty($nPass)){
        echo "NOT FOUND";
    }
    //echo "null";
}

请提出解决方案。提前谢谢。

2 个答案:

答案 0 :(得分:0)

希望它能正常工作:

$password= generatePassword();
while(!preg_match("/[a-z]/", $password) || !preg_match("/[A-Z]/", $password) || !preg_match("/[0-9]/", $password))
{
    $password= generatePassword();
}
echo $password;
function generatePassword()
{
    $str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $pass = array();
    $length = strlen($str) - 1;
    for ($i = 0; $i < 4; $i++)
    {
        $index = rand(0, $length);
        $pass[] = $str[$index];
    }
    $nPass = implode($pass);
    return $nPass;
}

答案 1 :(得分:0)

我做:

function gener_pass() {
    $lower = str_shuffle('abcdefghijklmnopqrstuvwxyz');
    $upper = str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZ');
    $digit = str_shuffle('0123456789');
    $all = str_shuffle($lower . $upper . $digit);

    return str_shuffle($lower[0] . $upper[0] . $digit[0] . $all[0]);
}

for($i=0; $i<10; $i++) {
    echo gener_pass(),"\n";
}

<强>输出:

T8tj
cME4
N5o7
zB24
n3VC
zYE7
b5WK
oRY2
uX5A
PDc8