2017-01-13 2 views
-2

一致するものがない場合、単一の出力ステートメントを印刷できません。現時点では、一致するものがない場合(パスワードを含む数字なし)、マッチするまで何度も印刷されます。JavaScript - Whileループステートメントが複数回出力される

誰でも以下の私のジレンマを見てみてください取るんでした:

var password = "password1"; 
var i = 0; 

function checkPassword(password) { 
    if (password === "") { 
    console.log("password cannot be empty"); 
    } else if (password.length < 8) { 
    console.log("password should be at least 7 characters"); 
    } else { 
    while (i < password.length) { 
     if (password[i] == password.match(/[0-9]/g)) { 
     console.log("found: " + password[i]); 
     } else { 
     console.log("not found"); 
     } 
     i++; 
    } 
    } 
} 
+1

ループは意味をなさないしながら、これで確認してください。 – dfsq

+0

最も効率的な方法の1つは、ループの後にlogステートメントを置くことです。 – Teemu

答えて

3
var password = "password1"; 
var i = 0; 

function checkPassword(password) { 
    if (password === "") { 
    console.log("password cannot be empty"); 
    } else if (password.length < 8) { 
    console.log("password should be at least 7 characters"); 
    } else { 
    var found = false; 
    while (i < password.length) { 
     if (password[i].match(/[0-9]/g)) { 
     found = true; 
     break; 
     } 
     i++; 
    } 
    if(found) { 
     console.log("found"); 
    } else { 
     console.log("not found"); 
    } 
    } 
} 

をしかし、あなただけの文字列の数を探しているなら、あなたは、より良い、このようにそれを行う必要があります。ここで

var password = "password1"; 

function checkPassword(password) { 
    if (password === "") { 
    console.log("password cannot be empty"); 
    } else if (password.length < 8) { 
    console.log("password should be at least 7 characters"); 
    } else if(!password.match(/[0-9]{1,}/)) { 
    console.log("password should contain at least one number"); 
    } else { 
    console.log("okay"); 
    } 
} 

JSFiddleです:https://jsfiddle.net/7btt1axb/

+1

2番目のコード例は、最初のコード例をスニペットで実行しているときに 'if(password [i]!= password.match(/ [0-9]/g)){'それは常に 'not found 'もしパスワードが番号を持っていて、まだ動作していなければ。 – Nope

+1

はい、書き込みが速すぎます。今は修正されています。 –

+0

ありがとうございました!それはまさに私が探していたものです。私はコードのシンプルさが大好きです! –

0

これは何か?

var password = "password1"; 
 

 
function checkPassword(password) { 
 
    if (password === "") { 
 
    console.log("password cannot be empty"); 
 
    } else if (password.length < 8) { 
 
    console.log("password should be at least 7 characters"); 
 
    } else { 
 
    var i = 0, found = false; 
 
    while (i < password.length && !found) { 
 
     if (password[i] == password.match(/[0-9]/g)) found = true; 
 
     else i++; 
 
    } 
 
    if (found) { 
 
     console.log("found: " + password[i]); 
 
    } else console.log("not found"); 
 
    } 
 
} 
 
checkPassword(password);

+0

個々の文字を 'password.match(/ [0-9]/g)'としてループする必要はありません。 ''すべての数字を検出します。これは公開アプリのためのものです。一致した配列を返し、一致するものが見つからなければ 'null'が返されます。これはif文の文脈では' false'とみなされます。 – Nope

+0

確かに、あなたは正しいです。 ssc-hrep3の答えが行く方法です。私は彼に票を投じた。 –

関連する問題