【问题标题】:php - Regular expression questionphp - 正则表达式问题
【发布时间】:2011-10-17 06:25:18
【问题描述】:

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

大写、小号、数字、破折号、大写、小号、数字、特殊字符。

例子:

Ab1-Cd2$

我已将所有特殊字符放入一个随机选择的数组中,所以我已经弄清楚了那部分。但我不知道如何做另一部分。有什么建议吗?

【问题讨论】:

  • 为什么需要正则表达式?
  • @Mchl 另一部分为大写、小号、数字。关于另一部分:我不知道,认为这是最好的解决方案。
  • 如果密码是随机生成的,则不需要正则表达式,因为密码应该已经可以使用了,不是吗?
  • 另一部分是检查这样的密码?
  • 如果你指定模式,它不是随机的,而且这样做也不太安全

标签: php string passwords


【解决方案1】:

chr() 与 A-Z、a-b、0-9 范围之外的随机 ascii 值一起使用。

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

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

示例:a-z 是从 97 到 122。

【讨论】:

    【解决方案2】:

    您不需要在此处使用 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));
    

    【讨论】:

      【解决方案3】:

      这不是最好的方法,但这会奏效

      <?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@
      

      我猜这是你的要求

      如果您需要更多帮助,请告诉我。

      【讨论】:

      • 知道了,谢谢。但是 array_rand 对我不起作用,它只将位置作为整数返回。例如,我选择了rand(0,25)
      • 是的,array_rand 只会返回一个随机整数的位置。这就是为什么我们把它作为同一个数组的键,这样它就会返回一个随机值。我尝试运行该脚本,它对我有用。同样,由于我们已经知道可用元素的数量,因此您的变化也很好。 :)
      猜你喜欢
      • 2017-03-18
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      相关资源
      最近更新 更多