使用する必要がある場合は、ばかばかしいほど長いリストであっても、すべての可能性をカバーするわけprompt()
ではないため、エラー マージンを決定する必要があります。それ以外の場合は、これで元に戻るか、対処がはるかに簡単になるため、単に置き換えることができます。を使用することを強くお勧めしますが、必要な場合は以下のオプションがあります。prompt()
confirm()
true
false
confirm()
prompt()
特定のオプションの配列
組み合わせが非常に限られているため、あまり良くありません。より多くの可能性があると、はるかに大きな配列が作成されます。また、indexOf polyfill が必要になる場合があります (カスタム ループを追加しない限り)。
var questions = [{
question: 'Are you ready to play?',
answers: ['yep','yes','yea','yeah','hell yeah','hell yea','absolutely','duh','of course'],
affirm: 'Yay! You will be presented with a series of questions. If you answer a questions incorrectly, you cannot advance to the next...',
rebuttal: "No, you're definitely ready to play."
}];
if(questions[i].answers.indexOf(answer) > -1) //.indexOf may need polyfill depending on supported browsers
猛烈な正規表現
柔軟性が向上し、より多くのオプションのコードが短縮されますが、単純な文字列比較と比較してパフォーマンスの問題がわずかに発生する可能性があります
var questions = [{
question: 'Are you ready to play?',
answer: /((hell[sz]? )?ye[psa]h?|absolutely|duh|of course)!*/i, //matches "hell yea","hells yea","hellz yea","hell yeah","yep","yes","hellz yeah!","hell yesh" .... etc plus the full words at the end
affirm: 'Yay! You will be presented with a series of questions. If you answer a questions incorrectly, you cannot advance to the next...',
rebuttal: "No, you're definitely ready to play."
}];
if(questions[i].answer.test(answer))
正規表現の配列
最初の 2 つの問題を結合しますが、正規表現を管理しやすくします
var questions = [{
question: 'Are you ready to play?',
answers: [/ye[psa]!*/,/(hell )?yeah?!*/,/absolutely!*/,/duh!*/,/of course!*/,/yeehaw!*/]
affirm: 'Yay! You will be presented with a series of questions. If you answer a questions incorrectly, you cannot advance to the next...',
rebuttal: "No, you're definitely ready to play."
}];
var saidYes = false;
for(var j=0,c=questions[i].answers.length;j<c;j++)
{
if(questions[i].answers[j].test(answer))
{
saidYes = true;
break;
}
}
confirm() を使用する - 個人的な推奨事項
さまざまな応答の可能性を排除することにより、プロセス全体を簡素化します
var answer = confirm(questions[i].question);
var correct = false;
while (correct === false)
{
if(answer)
{
alert(questions[i].affirm);
correct = true;
}
else
{
alert(questions[i].rebuttal);
answer = confirm(questions[i].question);
}
}