簡體   English   中英

如何使用正則表達式驗證密碼?

[英]How do I validate a password using regular expressions?

有人可以幫助以下 JavaScript。 我是編碼新手,目前正在使用正則表達式練習密碼驗證。 以下驗證不起作用,我不明白為什么,因為我之前在不使用 re 的情況下練習了 pw 驗證,並且效果很好。

例如: - 如果密碼不匹配,則不顯示錯誤消息,表格被接受。 - 如果用戶名僅包含字母,則仍接受該表單。

任何幫助/提示都會很棒。 (ps這個js格式被在線導師使用了......不知道為什么它不適合我......但我也有點困惑他為什么按這個順序編寫js!)

<!DOCTYPE html>

<html>
<head>
    <meta charset="utf-8">
    <!--<link rel="stylesheet" type="text/css" href="stylesheet.css" > -->
    <link type="text/css" rel="stylesheet" href="stylesheet.css">  
    </head>

<body>
    <h1>Using regular expressions</h1>
    
    <form onsubmit="return checkForm(this);">
        <p> Username: <input type="text" name="username"/></p>
        <p> Password: <input type="password" name="pwd1"/></p>
        <p> Confirm Password: <input type="password" name="pwd2"/></p>
        <p> <input type="submit"/></p>
    
    </form>
    
    <script>
    
    function checkPassword(str) {
            var re = /^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{8}$/;
            return re.test(str);
    
        }
    function checkForm(form) {
        if (form.username.value == "") {
            alert("Username cannot be blank!");
            form.username.focus();
            return false;        
        }
        re = /^\w+$/;
        if (!re.test(form.username.value)) {
            alert("Username must contain letters, numbers and underscores only");
            form.username.focus();
            return false;
        }
        if (form.pwd1.value != "" && form.pwd1.value == form.pwd2.value) 
            if(!checkPassword(form.pwd1.value)){
               alert("Incorrect");
                form.pwd1.focus();
                return false;
            }
           alert("You have successfully registered!");
            return true;
        }    
            
    
    </script>
    
    
    </body>
    
    
    
</html>

檢查包含至少一個數字和一個特殊字符的 7 到 15 個字符的密碼

function CheckPassword(inputtxt) {
    var paswd = /^(?=.*[0-9])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]{7,15}$/;
    if (inputtxt.value.match(paswd)) {
        alert('Correct, try another...')
        return true;
    } else {
        alert('Wrong...!')
        return false;
    }
}

檢查 8 到 15 個字符的密碼,其中至少包含 1 個小寫字母、1 個大寫字母、1 個數字和 1 個特殊字符

function CheckPassword(inputtxt) {
    var decimal = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9])(?!.*\s).{8,15}$/;
    if (inputtxt.value.match(decimal)) {
        alert('Correct, try another...')
        return true;
    } else {
        alert('Wrong...!')
        return false;
    }
}

由於這一行,您的代碼允許使用無效密碼:

if (form.pwd1.value != "" && form.pwd1.value == form.pwd2.value) 
  if (!checkPassword(form.pwd1.value)) {
    alert("Incorrect");

它基本上是在說:

  • 如果密碼 1 不為空且兩個密碼相同,則驗證密碼。

這沒有任何意義。 為什么您只想在密碼不為空或兩者相同時才驗證密碼? 這允許一個人輸入無效密碼並逃脫它,只要他們在 2 個密碼框中輸入不同的值,或者即使他們根本沒有輸入密碼。

把上面的代碼改成這樣:

  if (form.pwd1.value != form.pwd2.value || !checkPassword(form.pwd1.value || '')) {
    alert("Incorrect");

如果用戶嘗試輸入空白密碼、兩個密碼不相等或其中一個密碼未通過驗證測試,這將顯示錯誤消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM