密碼複雜度

Aug 19, 2014

3 mins read

密碼複雜度利用Regular Expression可以簡單地完成 先用一個簡單的例子,6~12個英數字混合的規則
<div>
    <asp:TextBox ID="Tbx_Password" runat="server" />
    <asp:Button ID="Btn_Save" Text="Save" OnClick="Btn_Save_Click" runat="server" />
    <asp:RequiredFieldValidator ID="Rfv_Password" ControlToValidate="Tbx_Password" 
        ErrorMessage="密碼不可空白" SetFocusOnError="true" Text="密碼不可空白" ForeColor="Red" 
        Display="Dynamic" runat="server" />
    <asp:RegularExpressionValidator ID="Reg_Password" ControlToValidate="Tbx_Password" 
        ValidationExpression="^(?!.*[oO0])(?=.*[a-zA-Z])(?=.*[\d])(?!.*[\d][\d][\d]).{6,12}$"
        ErrorMessage="密碼長度6~12英數混合" Text="密碼長度6~12英數混合" SetFocusOnError="true" 
        ForeColor="Red" Display="Dynamic" runat="server" />
</div>
^開頭符號
(?=.*[a-zA-Z])最少一個英文字
(?=.*[\d])最少一個數字
.{6,12}6~12長度
$結尾符號
利用群組的功能還可以組合出更多的規則
(?=.*[!@#$%^&*])最少一個符號
(?=.*[\d][\d])連續兩個數字
(?=.*[a-z][a-z])連續兩個小寫英文
(?!.*[\d][\d][\d])禁止連續三個數字
(?!.*[oO0])禁止小寫的o和大寫的O和數字的0
如果不是WebForm專案,也可以透過System.Text.RegularExpressions空間下的Regex物件來使用
protected void Btn_Save_Click(object sender, EventArgs e)
{
    Regex reg = new Regex(@"^(?!.*[oO0])(?=.*[a-zA-Z])(?=.*[\d])(?!.*[\d][\d][\d]).{6,12}$");
    if (reg.IsMatch(Tbx_Password.Text))
    {
        Response.Write("Match");
    }
    else
    {
        Response.Write("Not Match");
    }
}

Sharing is caring!