“虽然 ( strlen($tmppwd) < 20 )...”返回少于 20 个字符的字符串

"while ( strlen($tmppwd) < 20 )..." returns strings shorter than 20 characters

提问人:anrui71 提问时间:12/31/2022 最后编辑:Neha Sonianrui71 更新时间:12/31/2022 访问量:67

问:

我正在尝试生成一个长度为 20 个字符的随机字符串,并从我的程序中得到意外的行为, 很好奇我错过了什么。

代码如下:

<?php
    $tmppwd ="";
    while ( strlen($tmppwd) < 20 ) {
      $zufall = rand(33,126);
      if ($zufall != 36 && $zufall !=63 && $zufall !=61) {
        $tmppwd.=chr($zufall);
      }
      echo strlen($tmppwd)." | ";
    }
    exit($tmppwd);
?>

这个简短的代码片段不时返回长度小于 20 个字符的字符串(例如“~#z-k”),而在这种情况下,echo 和 exit 一起返回

"1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | \~#z-k"...
php while-loop strlen

评论

1赞 nice_dev 12/31/2022
这很好用。请参阅 onecompiler.com/php/3ytggb5qp 随机字符串的长度为 20 个字符。
0赞 nice_dev 12/31/2022
了解如何测试代码。避免使用,因为它会突然退出整个程序执行。exit
0赞 Your Common Sense 12/31/2022
我想说的是,输出是在 HTML 中打印的,因此可以剪切输出。>"
0赞 Your Common Sense 12/31/2022
我也想知道,这是怎么回事? 符号?为什么他们被禁止?$ and =

答:

-2赞 Ali Usama 12/31/2022 #1

在这里,我更新了您的代码,现在它给出的字符串不少于 20 个字符 将字符连接到字符串时的简单添加计数器

<?php
    $tmppwd ="";
    $countrer = 0;
    while ( $countrer < 20 ) {
      $zufall = rand(33,126);
      if ($zufall != 36 && $zufall !=63 && $zufall !=61) {
        $tmppwd.=chr($zufall);
        $countrer ++;
      }
      echo strlen($tmppwd)." | ";
    }
    exit($tmppwd);
   ?>

评论

1赞 nice_dev 12/31/2022
OP的代码无论如何都是正确的!
0赞 Your Common Sense 12/31/2022
如果你不了解问题,就不要写解决方案