使用 Regular Expression 驗證密碼複雜度

以前我都沒想過可以用 Regular Expressions 驗證複雜格式的密碼,原來可以用 Regular Expression 中的群組建構式達成這個目的,例如說密碼的條件是這樣:

  1. 至少有一個數字
  2. 至少有一個小寫英文字母
  3. 至少有一個大寫英文字母
  4. 字串長度在 6 ~ 30 個字母之間

那麼你的 Regular Expression 可以長這樣:

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

在這段 Regular Expression 的語法中值得注意的就是 (?=.*\d) 這段語法,這段於法又稱做「右合樣 (Positive Lookahead)」,右合樣(或左合樣)語法所佔用的寬度為 0,也就是說這段語法本真不會佔用比對的字元,僅僅只是 Regular Expression 中的一種「判斷式」而已,右合樣 (Positive Lookahead)會判斷右邊緊接著的字元是否符合比對條件,如果符合條件才會繼續比對下去。

所以剛剛這段於法的解釋大致可以這樣說明:

(?=.*\d) 與 (?=.*[a-z]) 與 (?=.*[A-Z]) 寬度都會是零,所以整個字串比對會以 .{6,30} 為主,但比對之前會分別比對 (?=.*\d) 與 (?=.*[a-z]) 與 (?=.*[A-Z]) 這三個判斷式,都判斷成功才會進行 .{6,30} 的比對。所以 (?=.*\d) 的 .*\d 就是說右邊的文字中一定要出現一個數字符號,(?=.*[a-z]) 的 .*[a-z] 就是說右邊的文字中一定要出現一個小寫字母,(?=.*[A-Z]) 的 .*[A-Z] 就是說右邊的文字中一定要出現一個大小字母,最後才會比對 .{6,30} 也就是說比對字串的長度必須在 6 ~ 30 個字的任意字元。

如果你的條件修改成:

  1. 至少有一個數字
  2. 至少有一個大寫或小寫英文字母
  3. 至少有一個特殊符號
  4. 字串長度在 6 ~ 30 個字母之間

那麼你的 Regular Expression 可以長這樣(以 C# 作範例):

Regex regex = new Regex(@"^(?=.*\d)(?=.*[a-zA-Z])(?=.*\W).{6,30}$");

這樣一來你知道如何融會貫通了嗎?^_^

相關連結

时间: 2024-10-23 18:33:48

使用 Regular Expression 驗證密碼複雜度的相关文章

實際案例: 接口接入驗證 (程式碼)

同樣的 本案例也是採用大名鼎鼎的 Senparc 微信開發套件 廢話不多說,具體程式碼如下 using ShouJia.BO; using ShouJia.Common; using ShouJia.Debugger; using ShouJia.Facades; using ShouJia.Framework; using Senparc.Weixin.MP; using System; using System.Data; using System.Data.Common; using Sy

實際案例: 接口接入驗證 (公眾號設定)

一.登入官方的微信公眾號平台 二.進入設定頁面 三.進入服務器配置 四.填寫握修改配置信息 補充說明: 1.URL:就是做轉接的網址,實際執行驗證的程式碼寫在這裡. 2.Token:本質就是一個字串,內容可以隨便輸入,長度在 3 ~ 32 個字元之間,只要後續呼叫時所輸入的 token 和這裡設定的一致即可.講究一點的,可以試試用 Visual Studio 的 GUID 產生器,或者用 SQL Server 的 NewID() 函式產生 32 個字元的字串. 3.EncodingAESKey:

Linux-PAM(Linux下的密碼認證和安全机制)系統管理員指南(中文版)

he Linux-PAM 系统管理员指南作者:Andrew G. Morgan, [email protected]翻译:孙国清(Thomas Sun),[email protected]DRAFT v0.71 1999/11/8 这个文档所涉的是系统管理员须知的关于Linux-PAM库的知识. 它涉及了设置PAM的正确语法并讨论维护一个可靠系统的正确的策略.1. 介绍 Linux-PAM (Linux下的可插入式认证模组) 是一套共享函数库,允许系统管理员来决定应用程式如何识别用户. 换句话说

驗證碼

<title>驗證碼</title> <script type="text/javascript"> //点击切换验证码 function f_refreshtype() { var Image1 = document.getElementById("img"); if (Image1 != null) { Image1.src = Image1.src + "?"; } } </script>&l

用戶登陸。防SQL注入,驗證碼不區分大小寫。。

if (string.Compare(TBCheckCode.Text, Session["CheckCodeI"].ToString(), true) == 0)        {            string password = FormsAuthentication.HashPasswordForStoringInConfigFile(TBpassword.Text, "md5");//MD5加密            string mycon = C

493萬Gmail用戶的賬號密碼遭洩露,Google否認自己存在安全漏洞

最近,大公司在互聯網信息安全問題上狀況頻出.上週,蘋果因iCloud被黑客攻擊而導致大量明星私照外洩,著實是熱鬧了一陣.而Google也來湊熱鬧了.據俄羅斯媒體CNews消息,近493萬Gmail用戶的賬號和密碼被發佈到了俄羅斯的一個比特幣論壇上,所幸暫時還沒有造成更大規模的相關隱私信息洩露. 不過,Google 並不認為這是由於自己存在安全漏洞而造成的.其發言人表示:我們最重視的事情便是用戶的信息安全,尚沒有任何證據表明我們的系統被入侵過.不過,既然發生了這樣的情況,我們將幫助這些用戶加強他們

.net使用微軟自帶的用戶驗證和登錄授權

使用微軟的用戶驗證,權限管理的方法 一.使用配置好的數據庫, 1.首先建立想定的數據庫(只填寫名字不加載任何表,如:Login數據庫) 2.使用vs兼容工具命令提示.如圖: 3.導入數據庫所需要的table a.使用剛才打開的工具命令提示,寫入代碼aspnet_regsql如圖 b.打開如下窗口后進行配置 注意上面箭頭的位置要與剛才,或者事先準備好的數據庫對應起來. 之後就是點下一步和完成就OK了. 配置完后的數據庫裡面的表 到目前位置數據庫的配置已經完成,下面就是使用 二.編寫配置文件 <co

登入ssh不用輸入密碼

最近在用rsync從ssh通道處理sync的工作,然而ssh是需要經過一道密碼輸入才能進行rsync ,而且也放入cron自動執行,找不到人輸入密碼它會哭哭的 ~ 利用ssh-keygen產生密鑰 id_rsa, id_rsa.pub $ssh-keygen -t rsa 或 ssh-keygen -d (dsa) 將產生完的 id_rsa.pub 用scp傳送至對方的主機.(這過程還是需要密碼) $scp id_rsa.pub server_hostname:~/.ssh/ 連到對方的主機 $

MySQL 5.6、5.7 忘記密碼

重置密碼過程 1.1報錯信息 [[email protected] mysql]# mysql -u root -pEnter password: 有輸入密碼ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)[[email protected] mysql]# mysql -u root -pEnter password: 無輸入密碼ERROR 1045 (28000): Acce