1

パスワード メーターは、ユーザーが強力なパスワードを作成できるようにガイドします。以下のパスワード要件をメーターに実装したいと思います。以下の強調表示されたコードを RegEx で追加しましたが、コードは必要なパスワード ガイドラインを検出しません。以下の要件を検出する正しいコードは何ですか?

  • 8文字以上
  • 大文字と小文字
  • 特殊文字
  • 4 文字以上の連続文字を含むことはできません
  • 4 つ以上の連続する数字を含めないでください

例:
Test%401 =
2323Ejsdh が不十分です! = 不十分
Tlv!897% = 強い
302^PLs# = 強い

ここに画像の説明を入力 ここに画像の説明を入力

ここに画像の説明を入力

if(val.length > 7 && val.match(/\d{4}/) && val.match(/[a-zA-Z]{4}/) && val.match(/[~,!,@,#,$,%,^,&,*,(,),+,-,?]/))
4

1 に答える 1

1

これは、タスクに対する単一の正規表現アプローチです。

^(?=.*[a-zA-Z])(?=.*[^\w\s])(?!.*(?:[a-zA-Z]{4}|\d{4})).{8,}$

特定の「特殊」文字に一致させる必要がある場合は、 (単語や空白文字[~!@#$%^&*()+?-]ではなく) の代わりにクラスを使用してください。内訳:[^\w\s]

var rx = RegExp ("^" +                            // Start of string
                "(?=.*[a-zA-Z])" +               // Letter is required
                "(?=.*[^\\w\\s])" +              // A special character is required
                "(?!.*(?:[a-zA-Z]{4}|\\d{4}))" + // No 4 letters or digits on end are allowed
                ".{8,}" +                        // The whole length can be 8 or more characters
                "$"                              // End of string
              );

ここに作業スニペットがあります:

var ins = "Test%401";
var ins1 = "2323Ejsdh!";

var strong1 = "Tlv!897%";
var strong2 = "302^PLs#";

var rx = RegExp ("^" +                            // Start of string
                 "(?=.*[a-zA-Z])" +               // Letter is required
                 "(?=.*[^\\w\\s])" +              // A special character is required
                 "(?!.*(?:[a-zA-Z]{4}|\\d{4}))" + // No 4 letters or digits on end are allowed
                 ".{8,}" +                        // The whole length can be 8 or more characters
                 "$"                              // End of string
                );
document.getElementById("r").innerHTML += rx.test(ins) + "<br/>";
document.getElementById("r").innerHTML += rx.test(ins1) + "<br/>";
document.getElementById("r").innerHTML += rx.test(strong1) + "<br/>";
document.getElementById("r").innerHTML += rx.test(strong2) + "<br/>";
<div id="r"/>

別の方法は、条件を分割することです。

function CheckPass(val) {
   if(val.length <= 7) {
       return "Password is too short!";
   }
   else if (/\d{4}/.test(val)) {
          return "Password contains 4 digits on end!";
   }
   else if (/[a-zA-Z]{4}/.test(val)) {
          return "Password contains 4 letters on end!";
   }
   else if (!/[~!@#$%^&*()+?-]/.test(val)) {
          return "Password must contain at least one special character from the \"~!@#$%^&*()+?-\" set!";
   }
   else if (!/[a-z]/i.test(val)) {
          return "Password must contain at least one letter!";
   }
       else
           return "Password is strong!";
}
    
document.getElementById("r").innerHTML +=  "<b>Test%401</b>: "+CheckPass("Test%401") + "<br/>";
document.getElementById("r").innerHTML +=  "<b>2323Ejsdh!</b>: "+CheckPass("2323Ejsdh!") + "<br/>";
document.getElementById("r").innerHTML +=  "<b>23!34%12!</b>: "+CheckPass("23!34%12!") + "<br/>";
document.getElementById("r").innerHTML +=  "<b>23w34W12D</b>: "+CheckPass("23w34W12D") + "<br/>";
document.getElementById("r").innerHTML += "<b>Tlv</b>: "+ CheckPass("Tlv") + "<br/>";
document.getElementById("r").innerHTML +=  "<b>Tlv!897%</b>: "+CheckPass("Tlv!897%") + "<br/>";
document.getElementById("r").innerHTML +=  "<b>302^PLs#</b>: "+ CheckPass("302^PLs#");
<div id="r"/>

于 2015-10-01T07:30:16.140 に答える