2017-05-30 206 views
-1

我想這個EXP定期檢查用戶密碼:正則表達式的密碼字符6-12一個數字,一個大寫

$regex='/^(?=.*[[email protected]])(?=.*\d)[[email protected]]{6,12}$/'; 

if(isset($_POST['password']) && strlen($_POST['password'])>=6 && 
strlen($_POST['password']<=12) && preg_match($regex, $_POST['password'])){ 

echo 'ok'; 
}else{echo 'invalid password';} 

我想的密碼爲6至12個字符,在至少一個數字和至少一個大寫字母。

如果密碼是一樣的東西12Hello,而不是它的工作原理與Hello12它不工作,有人可以請幫助?

由於

+0

這不適用於**乾淨的**正則表達式。它必須非常強大。 –

+0

你能澄清你的問題嗎?它對'12Hello'和'Hello12'都有好的迴應,除非你在做什麼或除了你發佈的內容之外做了什麼。 [這是一個工作演示](https://3v4l.org/N4FVL)。順便說一下,請在發佈之前嘗試格式化您的代碼。您發佈的代碼很難閱讀,這會導致錯誤。 –

+0

這個問題上有很好的例子 - https://stackoverflow.com/questions/19605150/regex-for-password-must-be-contain-at-least-8-characters-least-1-number-and-bot – ASR

回答

0

嘗試這一個: -

最少6字符

ATLEAST 1大寫字符

至少一個數位

表達:

"/^(?=.*?[0-9])(?=.*[A-Z]).{6,12}$/" 
+1

編輯完成後,現在這個答案與我的相同,儘管缺少說明。 – chris85

+0

對不起克里斯,當我發佈我的答案..我真的沒有檢查你的答案上面。 –

+0

這裏'?''。*?'是多餘的。無論如何,'*'是0或更多。 – fubar

3

你的性格階層太寬泛。你需要分別檢查事情。

^(?=.*[A-Z])(?=.*\d).{6,12}$ 

(?=.*[A-Z])至少是一個大寫字母。
(?=.*\d)是至少一個數字
.{6,12}是6-12個字符(不屬於新行)
^$是錨確保完整的字符串匹配。

在您的正則表達式中,您的字符類[[email protected]]允許使用大寫字符,小寫字母,數字或@(這不能確保您有1個大寫字符)。如果使用這個正則表達式,您也不需要strlen函數。

相關問題