• ベストアンサー

00から59を入力されたかチェックしたい

テキスト入力フォームで、半角の00から59以外を入力したらエラーとしたいのですが、全角の数字を入力すると エラーになりません。 eval()以降のalert()が表示されないのが原因のようですが、どうすれば良いかわかりません。 function checkTime(hour, time){ wk_hour = eval(wk_hour); wk_time = eval(time); alert(wk_hour); alert(wk_time); // 0~24、0~59以外を入力したらエラーとしたい if (wk_hour < 0 || wk_hour > 23 || wk_time < 0 || wk_time > 59) { return false; } }

質問者が選んだベストアンサー

  • ベストアンサー
  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.3

後で wk_hour, wk_time を利用しなければならないですよね。 その点、先の回答は少しピントが外れていましたね。 AOK さん作の全角→半角置換関数 z2h_digit() を利用させていただき、 wk_hour = parseInt(z2h_digit(wk_hour), 10); wk_time = parseInt(z2h_digit(wk_time), 10); とすれば、全角数字が入力されてもちゃんと数値として wk_hour, wk_time が使えると思います。 parseInt() の第二引数に基数10を指定しないと、 "0" で始まる数字が8進数として解釈されてしまいます。

参考URL:
http://homepage3.nifty.com/aokura/jscript/z2h_digit.html
matchori
質問者

お礼

parseIntすごく便利ですね。知りませんでした。 Javascriptでも結構な事ができるんですね。 ありがとうございます。

その他の回答 (2)

  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.2

eval() では全角の文字列が数値にならないのではないかと思います。 どうせ全角をチェックしなければならないのなら、いっそ時・分を表す文字列を変換せず、 正規表現マッチさせてもいいのではないでしょうか。 // 「24時」はダメなんですよね? if (wk_hour.match(/^([0101]?[\d0-9]|[22][0-30-3])$/) == null /* \d = [0-9] */ || wk_time.match(/^([0-50-5][\d0-9]?|[6-96-9])$/) == null) { return false; }

参考URL:
http://tohoho.wakusei.ne.jp/js/index.htm
  • rara_sun
  • ベストアンサー率50% (271/539)
回答No.1

関連するQ&A

専門家に質問してみよう