确保密码包含3个阵列中的至少一个字符

时间:2018-05-31 12:27:43

标签: php arrays loops passwords

如何确保密码中每个数组至少包含一个字符?我可以用do..while,对吗?我不太明白的是我需要把if语句放在里面做...同时。

是吗...虽然确保每个阵列中至少有一个字符的唯一方法是在最终密码中还是有其他方法?

 $length = 6;  
 $a1 = str_split('0123456789');  
$a2 = str_split('%^*+~?!');  
$a3 = str_split('abcdefghigklmnopqrstuvwxyz');  

$result = ""; //final random password

for($i = 0; $i < $length; $i++){

$values = [$a1,$a2,$a3];
$chosen = array_rand($values);

$result .= $values[$chosen][array_rand($values[$chosen])];
}

echo $result;

3 个答案:

答案 0 :(得分:1)

$length = 6;  
$a1 = str_split('0123456789');  
$a2 = str_split('%^*+~?!');  
$a3 = str_split('abcdefghigklmnopqrstuvwxyz');  



$resultArr[] = $a1[array_rand($a1)];
$resultArr[] = $a2[array_rand($a2)];
$resultArr[] = $a3[array_rand($a3)];

for($i = 0; $i < $length-3; $i++){

$values = [$a1,$a2,$a3];
$chosen = array_rand($values);

$resultArr[] = $values[$chosen][array_rand($values[$chosen])];
}
shuffle($resultArr);
$result = implode($resultArr); //final random password
echo $result;

答案 1 :(得分:0)

您可以使用preg_match()http://example.com/your-subdirectories/signup.php条件检查以及检查结果中是否至少包含一个字符的正则表达式模式包围for智慧do..while

<?php

$length = 6;  
$a1 = str_split('0123456789');  
$a2 = str_split('%^*+~?!');  
$a3 = str_split('abcdefghigklmnopqrstuvwxyz');  

$result = ""; //final random password

do {
   for($i = 0; $i < $length; $i++){

        $values = [$a1,$a2,$a3];
        $chosen = array_rand($values);

        $result .= $values[$chosen][array_rand($values[$chosen])];
    } 

} while(!(preg_match('/^(?=.*?[0-9])(?=.*?[a-z])(?=.*?[%*+?!]).{1,}/', $result)));

echo $result;

如果使用preg_match与模式没有重合,那么将返回false,在do..while条件下我们检查一个preg_match是否为false,如果是,则再次执行。

答案 2 :(得分:-3)

我对任意数量的数组都做了一般的答案。

我会使用preg_match()来解决这个问题,但对于您提出的问题,是的,您需要分别检查每个数组:

$user_inputted_password = $_POST['user_inputted_password'];

$length = strlen($user_inputted_password); // user input password - you are capturing this somewhere, right

$a1 = str_split('0123456789');  
$a2 = str_split('%^*+~?!');  
$a3 = str_split('abcdefghigklmnopqrstuvwxyz');  

$validate = array();

$result = ""; //final random password

function populate_validation_array($match_num, &$validate) {        
    if (!in_array($match_num, $validate)) {
        $validate[] = $match_num; 
    }
}

$numeric_indexes = array(1, 2, 3);
$index_count = count($numeric_indexes);

for($i = 0; $i < $length; $i++){        
    for($j = 0; $j < $index_count; $j++) {
        $numeric_index = $numeric_indexes[$j];
        if (in_array($user_inputted_password[$i], ${"a" . $numeric_index})) {
            populate_validation_array($numeric_index, $validate);
        }
    }
}

if (count($validate) === $index_count) {
    $values = array();
    for($i = 0; $i < $index_count; $i++) {
        $values[] = ${"a" . ($i + 1)};
    }
    $chosen = array_rand($values);
    $result .= $values[$chosen][array_rand($values[$chosen])];
}

echo $result;