2

これで助けが得られることを願っています。私はJSの初心者です。ユーザーに現在の時間を尋ねるスクリプトを作成する必要があります。簡単だ。時間が午前 6 時から午前 9 時の間であれば、特定のプロンプトが表示されます。午前 11 時から午後 1 時までの場合は、別のプロンプトが表示されます。午後 5 時から午後 8 時までの場合は、プロンプトを表示します。私の問題は、ユーザーが5番に入ったときにJSに理解させる方法です。たとえば、5時(夕食の時間)であり、午前5時(おやつを食べに行く)ではありません。私を助けてください。私の問題の解決策は何ですか?米国では実際に 24 時間形式を使用する人はいないため、スクリプトで 13 (午後 1 時)、17 (午後 5 時)、または 20 (午後 8 時) という数字は機能しません。入力は 12 時間形式でのみ行うことができます。

var hour=prompt("What is the current hour? ","");

  if( hour >= 6 && hour <= 9 ){
    alert("Breakfast is served.");
  }
  else if( hour >=11  && hour <= 13 ){
    alert("Time for lunch.");
  }
  else if( hour >=17  && hour <= 20 ){
    alert("It's dinner time.");
  }
  else {
    alert("Sorry, you'll have to wait, or go get snack.");
  }
4

2 に答える 2

1

JavaScript の String.match()を使用して文字列を/^(\d{1,2})\s*(am|pm)?$/i. この RegExp は次のことを意味します。

  • ^文字列の先頭に一致
  • (\d{1,2})1 つまたは 2 つの数字 (つまり、0 ~ 9) を一致させてキャプチャする
  • \s*0 個以上の空白文字に一致
  • (am|pm)?オプションで、一致してキャプチャする'am'か、'pm'
  • $文字列の末尾に一致
  • i最後に、一致の大文字/小文字を無視することを意味します(つまり、一致'am'または'AM'

また、ユーザーが正しい形式を入力しなかった場合に備えて、プロンプトをループさせます。

これが完全なサンプルです。

var hour;
var done = false;

while (!done) {
  var answer = prompt("What is the current hour?","");
  var result = answer.match(/^(\d+)\s*(am|pm)?$/i);
  if (result) {
    hour = +result[1];
    if (result[2] && result[2].match(/pm/)) {
      // If pm was specified, add 12
      hour += 12;
    }
    if (hour < 24) {
      done = true;
    }
  }
}

... Your code as before
于 2013-10-11T05:24:10.093 に答える
1

12 > 24 時間を解析するパーサーを作成します。これを行うことができます。

var hour   = prompt("What is the current hour? ","");
var apm    = hour.replace(/[0-9]/g, '');
var thour  = ""
if(apm = "am"){
  thour = parseInt(hour);
  out(thour);
}
else{
  thour = parseInt(hour) + 12;
  out(thour);
}
out = function(hour) {
(Your Code Here)
}

それが私が解決したすべてであり、出力はintです。したがって、コードはそのままにしておいてください。
出力は 24 時間です。

于 2013-10-11T05:33:17.643 に答える