2011-04-24 52 views
3

所以我有一個正則表達式的代碼,以確保密碼爲4至13個字符,它使正則表達式不能用於密碼?不知道爲什麼

public function valid_password($password){ 
     if(preg_match('^.{3,14}^', $password)){ 
      return true; 
     }//end if 
     else{ 
      return false; 
     }//end else  
    } 

我使用正則表達式,而不是PHP的長度屬性,因爲我將增加更多的正則表達式失敗代碼稍後。但是,現在我堅持這個失敗的計劃。

問題是,它確保密碼超過3個字符,但它並不在乎多久,因爲如果我沒有設置限制。

在此先感謝

回答

1

試試這個:

preg_match('/^.{3,14}$/', $password) 
2

^是一個字符串的開頭錨。字符串的結束符分隔使用$

public function valid_password($password) { 
    return preg_match('~^.{3,14}$~', $password); 
} 

但在這種情況下,我不會用正則表達式,但strlen函數:

public function valid_password($password) { 
    $length = strlen($password); 
    return $length >= 3 && $length <= 14; 
} 

如果你喜歡黑客身邊來拯救你該行:

public function valid_password($password) { 
    return isset($password[2]) && !isset($password[14]); 
} 

但是,真的,爲什麼要限制密碼長度爲14個字符?這樣你可以防止人們選擇真正安全的密碼。你可能應該提高這個限制。

+0

謝謝,我會嘗試一下 – Tom 2011-04-24 20:38:17

+0

「對不起,但功能** **長度不在線手冊。」也許你的意思是'strlen'? – 2011-04-24 20:40:46

+0

@Tomalak:你是對的!對不起。 – NikiC 2011-04-24 20:41:54

1

嘗試

preg_match('/^.{3,14}$/', $password) 

但正則表達式,用於計算字符串的長度? =過度衝擊

+0

+1的過度殺傷 – dynamic 2011-04-24 20:42:52

1

^匹配字符串的開始,而不是結束。 $匹配結束。

你忘了你的分隔符。

全,固定電話是:

if (preg_match('/^.{3,14}$/', $password)) { 

不過,我強烈建議你改用:

$len = strlen($password); 
if ($len >= 3 && $len <= 14) { 

代替,因爲正則表達式是完全矯枉過正這一點。

+0

好的謝謝,我會 – Tom 2011-04-24 20:39:05

2

您已經使用^作爲分隔符php.net/mregexp.reference.delimiters.php這裏:

^.{3,14}^ 

這是可能的,但你的情況不是一個好主意,因爲你需要的^其實際目的。它通常匹配主題的開始。要正確計算長度,您需要這樣做。您還需要主題元字符的$結尾。

所以基本上:

preg_match('/^.{3,14}$/' 

現在,如果你想要這個正則表達式與其他匹配標準相結合,我建議這個奇特斷言語法:

preg_match('/(?=^.{3,14}$) (...)/x', $password) 

這將允許你指定別的東西代替... - 並保持隱含的長度檢查。

相關問題