php使用正則驗(yàn)證密碼字段的復(fù)雜強(qiáng)度原理詳細(xì)講解 原創(chuàng)
密碼涉及到安全問題,簡單的密碼很容易被暴力破解,所以密碼設(shè)計(jì)的復(fù)雜程序尤為重要。通常情況下密碼由大小寫字母、數(shù)字、特殊符號組成。比如前端需要用戶設(shè)置密碼時(shí),可以使用javascript進(jìn)行正則判斷,密碼不符合要求時(shí)彈窗或輸出提示,那就不要使用php等后端語言了?不使用后端語言是不安全的,因?yàn)槠渌丝梢灾苯邮褂胮ostman等自定義參數(shù)提交你的URL接口。一般情況下前端可不做js判斷,使用ajax提交php后端程序接口,由后端判斷后返回json數(shù)據(jù),進(jìn)行用戶密碼復(fù)雜程序提示。
一. php密碼復(fù)雜示例
<?php
function check_password($password) {
$pattern1='/[A-Z]/';
$pattern2='/[a-z]/';
$pattern3='/[0-9]/';
$pattern4='/[_.\-#$%]/';
if(strlen($password)<6) {
echo "密碼需要至少包含6個(gè)字符";
exit;
}
if(!preg_match($pattern1,$password)) {
echo "密碼需要至少一個(gè)大寫字母";
exit;
}
if(!preg_match($pattern2,$password)) {
echo "密碼需要至少一個(gè)小寫字母";
exit;
}
if(!preg_match($pattern3,$password)) {
echo "密碼需要至少一個(gè)數(shù)字";
exit;
}
if(!preg_match($pattern4,$password)) {
echo "密碼需要至少一個(gè)特殊符號:_.-#$%";
exit;
}
echo "密碼符合要求";
}
echo check_password('jb51.net');輸出結(jié)果:
密碼需要至少一個(gè)大寫字母
示例代碼由淺入深詳細(xì)講解:
1. echo check_password('jb51.net'); echo—php字符串打印輸出,運(yùn)行check_password()方法,字符串參數(shù)—jb51.net;
2. $pattern1='/[A-Z]/'; 變量$pattern1賦值,后面的正則表達(dá)式規(guī)則:A-Z是指26個(gè)大寫英文字母,放在[]中的指其中一個(gè),兩邊的兩個(gè)斜杠"/"表示正則表達(dá)式的定界符;
3. $pattern2='/[a-z]/'; a-z是指26個(gè)小寫英文字母;
4. $pattern3='/[0-9]/'; 0-9是指0到9共10個(gè)數(shù)字;
5. $pattern4='/[_.\-#$%]/'; _.\-#$%是指字符_.-#$%,細(xì)心的朋友發(fā)現(xiàn)了嗎,中間有個(gè)反斜杠\,這個(gè)是特殊字符的轉(zhuǎn)義。通常正則表達(dá)式中匹配特殊字符"\"、"?"、"*"、"^"、"$"、"+"、"("、")"、"|"、"{"、"[",都需要用反斜杠("\")進(jìn)行轉(zhuǎn)義;
6. 字符串'jb51.net'大于6個(gè)字符,strlen() 函數(shù)返回字符串的長度,不報(bào)錯(cuò);
7. preg_match('正則表達(dá)式','需要匹配的字符串') 函數(shù)用于執(zhí)行一個(gè)正則表達(dá)式匹配,preg_match還有其他的參數(shù),有需要查看相關(guān)說明,preg_match的值將是 0 次(不匹配)或 1 次;
8. 從上往下運(yùn)行到preg_match($pattern1,$password)時(shí),preg_match匹配到'jb51.net'沒有大寫字母,值為0,加上'!'后值為真,輸出"密碼需要至少一個(gè)大寫字母!",'exit'退出腳本執(zhí)行。
二. 高級版簡單寫法
上面的示例朋友們可能發(fā)現(xiàn)有4個(gè)規(guī)則,進(jìn)行了5次判斷,考慮到運(yùn)行效率和代碼簡潔,高級版簡單寫法如下:
<?php
function check_password($password) {
$pattern5='/^(?![a-zA-Z_.\-#$%]+$)(?![a-zA-Z0-9]+$)(?![\d_.\-#$%]+$)(?![a-z\d_.\-#$%]+$)(?![A-Z\d_.\-#$%]+$)[\w.\-#$%]{6,30}$/';
if(!preg_match($pattern5,$password)) {
echo "密碼不符合要求!";
exit;
}
echo "密碼符合要求";
}
echo check_password('jb51.net');輸出結(jié)果:
密碼不符合要求!
示例代碼由淺入深詳細(xì)講解:
正則表達(dá)式講解,\w匹配一個(gè)英文字母、數(shù)字或下劃線;\w等價(jià)于[0-9a-zA-Z_];\d匹配一個(gè)數(shù)字;等價(jià)于[0-9];.\-#$%見上面講解;{6,30}對前面數(shù)量控制,表示是6到30個(gè);?![a-zA-Z_.\-#$%]+$指不包含字符串'a-zA-Z_.\-#$%'。
三. 總結(jié)
本文講解php使用正則驗(yàn)證密碼字段的復(fù)雜度,由淺入深簡單易懂,看懂的朋友可以舉一反三。比如使用preg_match("/^[0-9]+$/", $password)) 驗(yàn)證全是數(shù)字,注意前面沒有'!'。比如使用return json_encode(['code' => 0, 'msg' => '提示']);返回給前端json格式數(shù)據(jù),供前端ajax回調(diào)處理。
到此這篇關(guān)于php使用正則驗(yàn)證密碼字段的復(fù)雜度的文章就介紹到這了,更多相關(guān)php正則驗(yàn)證密碼強(qiáng)度內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章。希望大家以后多多支持腳本之家!
相關(guān)文章
PHP學(xué)習(xí)記錄之常用的魔術(shù)常量詳解
這篇文章主要介紹了PHP學(xué)習(xí)記錄之常用的魔術(shù)常量,結(jié)合實(shí)例形式總結(jié)分析了PHP魔術(shù)常量的功能、原理及常見操作技巧,需要的朋友可以參考下2019-12-12
用php實(shí)現(xiàn)百度網(wǎng)盤圖片直鏈的代碼分享
華為網(wǎng)盤有個(gè)直鏈功能,不過需要錢買。我有百度網(wǎng)盤,不過百度的網(wǎng)盤外鏈不能在網(wǎng)頁里直接使用圖片 華為的直鏈功能可以做到。百度哪天也能有這功能就好了。2012-11-11
PHP 計(jì)算至少是其他數(shù)字兩倍的最大數(shù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了PHP 計(jì)算至少是其他數(shù)字兩倍的最大數(shù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
thinkphp5使html5實(shí)現(xiàn)動(dòng)態(tài)跳轉(zhuǎn)的例子
今天小編就為大家分享一篇thinkphp5使html5實(shí)現(xiàn)動(dòng)態(tài)跳轉(zhuǎn)的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10
php empty 函數(shù)判斷結(jié)果為空但實(shí)際值卻為非空的原因解析
這篇文章主要介紹了php empty 函數(shù)判斷結(jié)果為空但實(shí)際值卻為非空的原因解析,下面是腳本之家小編處理之后的調(diào)試記錄,分享到腳本之家平臺,感興趣的朋友一起看看2018-05-05
laravel利用中間件做防非法登錄和權(quán)限控制示例
今天小編就為大家分享一篇laravel利用中間件做防非法登錄和權(quán)限控制示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10
關(guān)于php微信訂閱號開發(fā)之token驗(yàn)證后自動(dòng)發(fā)送消息給訂閱號但是沒有消息返回的問題
最近做了個(gè)項(xiàng)目,當(dāng)token驗(yàn)證之后,發(fā)送消息給訂閱號,但是沒有消息返回,下面小編通過本篇文章給大家分享我的解決辦法2015-12-12

