- ベストアンサー
promptを使用した年齢認証
javascriptを勉強し始めたばかりで参考書のとおりに打っているのですが、疑問が解決しなくて困っています。 以下のようなif else文があったとすると、コマンドにちゃんと数字を入力してくれたらそれで判定ができるんですが、数字ではなくて文字を入力されてしまっても通ることがわかり、何とか解決できないかと悪戦苦闘しています。 javaのことがよくわからなくて、本当にすみませんが、よろしくお願いします。 <script type="text/javascript"> var nenrei; nenrei=parseInt(prompt("年齢を入力してください。")); if(nenrei<18){ document.write("18禁です。"); } else{ document.write("入場できます。"); } </script>
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
<script type="text/javascript"> <!-- var nenrei; nenrei=prompt("年齢を入力してください。"); if(nenrei.length > 0 && nenrei.match(/^[0-9]*$/) && nenrei>18){ document.write("入場できます。"); } else{ document.write("18禁です。"); } //--> </script> こんな感じでどうでしょうか。 if文の中では 1.1文字以上の文字が入っているか 2.入力した文字が数字だけか 3.18より大きいか を見ています。 googleで「javascript 数値かどうか」とか検索すればいろいろ出てくるので参考にしてみてください。
その他の回答 (1)
- himajin100000
- ベストアンサー率54% (1660/3060)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Q3670040 TestCase 1</title> <script type="text/javascript"> //<![CDATA[ function init(){ var nenrei; nenrei=parseInt(prompt("年齢を入力してください。")); //文字が入力された時どんな値が入っているか確認してみよう //alert(nenrei); //入っていた値 NaNはそのまま比較できないようだ。 // http://htmlajax.org/index.php?area=Main&page=Number%20type%20of%20ECMAScript if(!isNaN(nenrei) ){ if(nenrei<18){ document.getElementById("hoge").appendChild(document.createTextNode("18禁です。")); }else{ document.getElementById("hoge").appendChild(document.createTextNode("入場できます。")); } }else{ document.getElementById("hoge").appendChild(document.createTextNode("整数でないものが入力されました。")); } } //ECMAscript無効にしている人のことも考えてあげてください //ECMAscript読める人には簡単に突破されるので //この手の判別は殆ど意味をなさない。 //本格的にやるなら //身分証明書のコピーでも郵送してもらって //ユーザー名とパスワード交付して //サーバ側でチェックとか。 //]]> </script> </head> <body onload="init();"> <p id="hoge"></p> </body> </html>
お礼
まだ勉強不足でこのプログラムが何を意味しているのか完全に把握できませんが、こうした解決の方法もあるということがわかりました。 さらに、この年齢認証のアルゴリズムでは現実的に意味を成さないことも教えてくださりありがとうございました。 実際に実用段階になったときに、ほかの方法で処理したいと思います。
お礼
回答ありがとうございました。 とてもわかりやすい説明までつけていただき、助かりました。 論理演算子とmatchで数字か数字かどうかを見ているのを組み合わせることで解決するんですね。 すごいためになりました。