2016-01-13 93 views
1

如果我們連續運行下面的代碼,有時我們發現它會在密碼中產生一些不應該得到的空間。避免產生密碼空間

誰能告訴如何避免從下面生成的密碼代碼空格字符:

下面是代碼:

function generateRandomPassword($length) { 
     srand((double)microtime()*1000000); 
     $password = ""; 
     $vowels = array("a", "e", "i", "o", "u"); 
     $cons = array("b", "c", "d", "g", "h", "j", "k", "l", "m", "n", "p", "r", 
"s", "t", "u", "v", "w", "tr", "cr", "br", "fr", "th", "dr", "ch", "ph", "wr", " 
st", "sp", "sw", "pr", "sl", "cl"); 
     $num_vowels = count($vowels); 
     $num_cons = count($cons); 
     for($i = 0; $i < $length; $i++) { 
     $c = $cons[rand(0, $num_cons - 1)]; 
     if (rand(0,1)) $c = strtoupper($c); 
     $v = $vowels[rand(0, $num_vowels - 1)]; 
     if (rand(0,1)) $v = strtoupper($v); 
     $password .= $c . $v; 
     if (rand(0,4) == 0) $password .= rand(0,9); 
     } 
     return substr($password, 0, $length); 
    } 

$pwd = generateRandomPassword(12); 

echo $pwd; 
+0

基本調試:'如果(($ C == ' ')或($ V =='')){模具( 「拿到索引$ I空間」);}'或任何。找出空間來自何處/何時,並檢查當時系統的狀態。 –

+0

我看不出會發生什麼。只是爲了確保我不會錯過某些顯而易見的事情,我將它運行了100,000次迭代。沒有空間。 – Steve

+1

儘管如果上面的代碼是一個精確的副本,在你的'$ cons'數組中,元素''st「'有一個換行符,這將是不可取的,並且可能被誤認爲是空格字符 – Steve

回答

2

替換爲以下return語句:

return trim(substr($password, 0, $length)); 

適用於所有空白用途:

return preg_replace('/\s+/', '', substr($password, 0, $length)); 

trim()從字符串中去除空格。但是,您的代碼存在的問題是$cons變量的st中有一個空格。

PhP trim Function