php - 正则表达式问题

时间:2011-08-01 08:14:15

标签: php string passwords

我想生成一个具有以下模式的随机密码:

资本,小,数字,短划线,资本,小数,数字,特殊字符。

示例:

Ab1-Cd2$

我已将所有特殊字符放在我随机选择的数组中,所以我找到了那个部分。但我不知道如何做其他部分。有什么建议吗?

3 个答案:

答案 0 :(得分:4)

这不是最好的方法,但这会起作用

<?php

    $capital    = range ('A','Z');
    $small      = range ('a','z');
    $number     = range ('0','9');
    $special    = array ("#","$","@");

    $password   =   $capital[array_rand($capital)] . 
                    $small[array_rand($small)] . 
                    $number[array_rand($number)] . 
                    "-" . 
                    $capital[array_rand($capital)] . 
                    $small[array_rand($small)] . 
                    $number[array_rand($number)] . 
                    $special[array_rand($special)];

    print $password;

您可以阅读我在这里使用的功能

array_rand

range

会产生如下结果:

Tg8-Im1$
Yj3-Xl3@
Cr1-Lv1@

我认为这是你的要求

如果您需要更多帮助,请与我们联系。

答案 1 :(得分:1)

chr()与随机ascii值一起使用,超出A-Z,a-b,0-9的范围。

这里:http://php.net/manual/en/function.chr.php

这里的ASCII表:http://www.asciitable.com/

示例:a-z从97到122。

答案 2 :(得分:1)

您无需在此处使用 regex 。您需要一个数组,其中包含可能出现在密码中的所有可能字符的值。然后,您只需循环遍历该数组并从中获取随机密钥。

$chars = array('a', 'b', 'c'); // For example.
$length = 6;

$password = '';
$count = count($chars) - 1;
for ($i = 0; $i < $length; ++$i) {
    $password .= $chars[mt_rand(0, $count)];
}

echo $password;

修改

如果您需要某种在范围中的值,那么有一个巧妙的技巧。您可以使用range()功能。

例如,这是函数,加上chr()函数来获取ASCII字符(从0x20到0x7E)。

$chars = range(chr(32), chr(126));