簡體   English   中英

Javascript 具有特殊字符的正則表達式密碼驗證

[英]Javascript regular expression password validation having special characters

我正在嘗試使用正則表達式驗證密碼。 如果我們將所有字符都作為字母,則密碼會更新。 我哪里錯了? 正則表達式對嗎?

function validatePassword() {
    var newPassword = document.getElementById('changePasswordForm').newPassword.value;
    var minNumberofChars = 6;
    var maxNumberofChars = 16;
    var regularExpression  = /^[a-zA-Z0-9!@#$%^&*]{6,16}$/;
    alert(newPassword); 
    if(newPassword.length < minNumberofChars || newPassword.length > maxNumberofChars){
        return false;
    }
    if(!regularExpression.test(newPassword)) {
        alert("password should contain atleast one number and one special character");
        return false;
    }
}

使用積極的前瞻斷言:

var regularExpression = /^(?=.*[0-9])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]{6,16}$/;

沒有它,您當前的正則表達式只匹配您有 6 到 16 個有效字符,它不會驗證它至少有一個數字,至少有一個特殊字符。 這就是上面的前瞻。

  • (?=.*[0-9]) - 斷言一個字符串至少有一個數字;
  • (?=.*[!@#$%^&*]) - 斷言一個字符串至少有一個特殊字符。
function validatePassword() {
    var p = document.getElementById('newPassword').value,
        errors = [];
    if (p.length < 8) {
        errors.push("Your password must be at least 8 characters"); 
    }
    if (p.search(/[a-z]/i) < 0) {
        errors.push("Your password must contain at least one letter.");
    }
    if (p.search(/[0-9]/) < 0) {
        errors.push("Your password must contain at least one digit."); 
    }
    if (errors.length > 0) {
        alert(errors.join("\n"));
        return false;
    }
    return true;
}

以下答案存在某個問題,因為在檢查字符和數字時由於缺少 [ ] 而沒有檢查整個字符串,這是正確的版本

我使用以下腳本輸入最少 8 個字母的密碼,至少包含一個符號、大小寫字母和一個數字

function checkPassword(str)
{
    var re = /^(?=.*\d)(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[A-Z]).{8,}$/;
    return re.test(str);
}

您可以為javascript驗證制作自己的正則表達式

    /^            : Start
    (?=.{8,})        : Length
    (?=.*[a-zA-Z])   : Letters
    (?=.*\d)         : Digits
    (?=.*[!#$%&? "]) : Special characters
    $/              : End



        (/^
        (?=.*\d)                //should contain at least one digit
        (?=.*[a-z])             //should contain at least one lower case
        (?=.*[A-Z])             //should contain at least one upper case
        [a-zA-Z0-9]{8,}         //should contain at least 8 from the mentioned characters

        $/)

Example:-   /^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{7,}$/

不要試圖一步做太多。 將每個規則分開。

function validatePassword() {
    var p = document.getElementById('newPassword').value,
        errors = [];
    if (p.length < 8) {
        errors.push("Your password must be at least 8 characters");
    }
    if (p.search(/[a-z]/i) < 0) {
        errors.push("Your password must contain at least one letter."); 
    }
    if (p.search(/[0-9]/) < 0) {
        errors.push("Your password must contain at least one digit.");
    }
    if (errors.length > 0) {
        alert(errors.join("\n"));
        return false;
    }
    return true;
}

密碼正則表達式

/^(?=.*\\d)(?=.*[AZ])(?=.*[az])(?=.*[a-zA-Z!#$%&? "])[a-zA-Z0-9!#$%&?]{8,20}$/

我花了一段時間才弄清楚這些限制,但我做到了!

限制:(注意:我使用了>><<來顯示重要的字符)

  1. 最少 8 個字符{>>8,20}
  2. 最多 20 個字符{8,>>20}
  3. 至少一個大寫字符(?=.*[AZ])
  4. 至少一個小寫字符(?=.*[az])
  5. 至少一位(?=.*\\d)
  6. 至少一個特殊字符(?=.*[a-zA-Z >>!#$%&? "<<])[a-zA-Z0-9 >>!#$%&?<< ]
<div>
    <input type="password" id="password" onkeyup="CheckPassword(this)" />
</div>   

<div  id="passwordValidation" style="color:red" >
    
</div>

 function CheckPassword(inputtxt) 
    { 
    var passw= /^(?=.*\d)(?=.*[a-z])(?=.*[^a-zA-Z0-9])(?!.*\s).{7,15}$/;
    if(inputtxt.value.match(passw)) 
    { 
    $("#passwordValidation").html("")
    return true;
    }
    else
    { 
    $("#passwordValidation").html("min 8 characters which contain at least one numeric digit and a special character");
    return false;
    }
    }

它對我來說很完美,我相信你們會很容易和准確地結帳

var regix = new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=. 
            {8,})");

if(regix.test(password) == false ) {
     $('.messageBox').html(`<div class="messageStackError">
       password must be a minimum of 8 characters including number, Upper, Lower And 
       one special character
     </div>`);
}
else
{
        $('form').submit();
}

如果單獨檢查長度,您可以執行以下操作:

var regularExpression  = /^[a-zA-Z]$/;

if (regularExpression.test(newPassword)) {
    alert("password should contain atleast one number and one special character");
    return false;
} 

經過大量研究,我能夠想出這個。 這有更多特殊字符

validatePassword(password) {
        const re = /(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()+=-\?;,./{}|\":<>\[\]\\\' ~_]).{8,}/
        return re.test(password);
    }

很有幫助。 它將幫助最終用戶在輸入密碼時識別缺少\/需要的字符。

這是一些改進,(在這里你可以添加你需要的特殊字符。)

function validatePassword(p) {
    //var p = document.getElementById('newPassword').value,
    const errors = [];
    if (p.length < 8) {
        errors.push("Your password must be at least 8 characters");
    }
    if (p.length > 32) {
        errors.push("Your password must be at max 32 characters");
    }
    if (p.search(/[a-z]/) < 0) {
        errors.push("Your password must contain at least one lower case letter."); 
    }
    if (p.search(/[A-Z]/) < 0) {
        errors.push("Your password must contain at least one upper case letter."); 
    }

    if (p.search(/[0-9]/) < 0) {
        errors.push("Your password must contain at least one digit.");
    }
   if (p.search(/[!@#\$%\^&\*_]/) < 0) {
        errors.push("Your password must contain at least special char from -[ ! @ # $ % ^ & * _ ]"); 
    }
    if (errors.length > 0) {
        console.log(errors.join("\n"));
        return false;
    }
    return true;
}

我的驗證 shema - 大寫、小寫、數字和特殊字符

new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9_])")

當您重新創建帳戶密碼時,請確保它是 8-20 個字符,包括數字和特殊字符,例如##\\/* - 然后驗證新密碼並重新輸入完​​全相同的密碼,應該可以解決密碼驗證的問題

這是密碼驗證示例,希望您喜歡。

必須使用大寫、小寫、特殊字符、數字和限制 8 的密碼驗證。

 function validatePassword(){ var InputValue = $("#password").val(); var regex = new RegExp("^(?=.*[az])(?=.*[AZ])(?=.*[0-9])(?=.*[!@#\\$%\\^&\\*])(?=.{8,})"); $("#passwordText").text(`Password value:- ${InputValue}`); if(!regex.test(InputValue)) { $("#error").text("Invalid Password"); } else{ $("#error").text(""); } }
 #password_Validation{ background-color:aliceblue; padding:50px; border:1px solid; border-radius:5px; } #passwordText{ color:green; } #error{ color:red; } #password{ margin-bottom:5px; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="password_Validation"> <h4>Password validation with Uppercase Lowercase special character and number must be required.</h4> <div> <input type="password" name="password" id="password"> <button type="button" onClick="validatePassword()">Submit</button> <div> <br/> <span id="passwordText"></span> <br/> <br/> <span id="error"></span> <div>

在這里,我正在擴展@João Silva 的答案。 我需要檢查不同的參數並相應地拋出不同的消息。

我將正則表達式分成不同的部分,現在checkPasswordValidity(String)<\/code>函數有條件地檢查每個正則表達式部分並拋出不同的消息。

希望下面的例子能幫助你更好地理解!

此外,我們可以將所有這些正則表達式模式組合成一個正則表達式:

注意:<\/strong>上面討論的正則表達式將檢查給定輸入值\/密碼中的以下模式:

    它不能包含任何空格。<\/li>
  • 它必須至少包含一個大寫字母、一個小寫字母和一個數字字符。<\/li>
  • 它必須至少包含一個特殊字符。 [~`!@#$%^&*()--+={}[]|\\:;"'<>,.?\/_₹]<\/li>
  • 長度必須介於 10 到 16 個字符之間。<\/li><\/ul>

    謝謝!

    "

國際 UTF-8

這里沒有一個解決方案允許使用國際字符,即 éÉáÁöÖæÆþÞóÓúÚ,但只關注英文字母。

以下正則表達式使用 unicode UTF-8 來識別大小寫,因此允許使用國際字符:

// Match uppercase, lowercase, digit or #$!%*?& and make sure the length is 8 to 96 in length  
const pwdFilter = /^(?=.*\p{Ll})(?=.*\p{Lu})(?=.*[\d|@#$!%*?&])[\p{L}\d@#$!%*?&]{8,96}$/gmu

if (!pwdFilter.test(pwd)) {
    // Show error that password has to be adjusted to match criteria
}

這個正則表達式

/^(?=.*\\p{Ll})(?=.*\\p{Lu})(?=.*[\\d|@#$!%*?&])[\\p{L}\\d@#$!%*?&]{8,96}$/gmu

檢查密碼中是否使用了大寫、小寫、數字或#$!%*?&。 它還將長度限制為最小 8 和最大 96,😀🇮🇸🧑‍💻 emojis 的長度在長度中算作多個字符。 最后的u告訴它使用 UTF-8。

var regularExpression = /^(?=. [0-9])(?=. [!@#$%^& ])[a-zA-Z0-9!@#$%^& ]{6,16} $/;

沒有它,您當前的正則表達式只匹配您有 6 到 16 個有效字符,它不會驗證它至少有一個數字,至少有一個特殊字符。 這就是上面的前瞻性的目的。

(?=. [0-9]) - 斷言一個字符串至少有一個數字; (?=. [.@#$%^&*]) - 斷言一個字符串至少有一個特殊字符。

暫無
暫無

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

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