web-dev-qa-db-ja.com

特殊文字を含むJavascript正規表現パスワード検証

正規表現を使用してパスワードを検証しようとしています。すべての文字がアルファベットの場合、パスワードは更新されます。どこがおかしいの?正規表現は正しいですか?

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;
    }
}
34

正の lookahead アサーションを使用します。

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

これがない場合、現在の正規表現は、6〜16個の有効な文字があることだけに一致します。doesn't少なくとも数字、および少なくとも特殊文字。それが上記の先読みの目的です。

  • (?=.*[0-9])-文字列に少なくとも1つの数字があることを表明します。
  • (?=.*[!@#$%^&*])-文字列に少なくとも1つの特殊文字があることを表明します。
62
João Silva
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;
}

文字と数字のチェック中に[]がないために文字列全体をチェックしないため、以下の回答に特定の問題があります。これは正しいバージョンです

28
atul-tagra

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,}$/
18
Ujjaval

最低8文字のパスワードに、少なくとも記号、大文字と小文字、数字を含む次のスクリプトを使用します

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

一度にやりすぎないでください。各ルールを別々にしてください。

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;
}
9
ChaosPandion

長さを個別にチェックすると、次のことができます。

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

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

パスワードの正規表現

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

制限を理解するためにしばらく時間がかかりましたが、私はそれをしました!

制限:(注:>>および<<を使用して重要な文字を表示しています)

  1. 最小8文字{>>8,20}
  2. 最大20文字{8,>>20}
  3. 少なくとも1つの大文字(?=.*[A-Z])
  4. 少なくとも1つの小文字(?=.*[a-z])
  5. 少なくとも1桁の(?=.*\d)
  6. 少なくとも1つの特殊文字(?=.*[a-zA-Z >>!#$%&? "<<])[a-zA-Z0-9 >>!#$%&?<< ]
0