- ベストアンサー
日付入力欄の表示形式を自動的に「yyyy/mm/dd」形式にしたい。
FORMによる入力ページを作成しているのですが、日付入力の欄に「yyyymmdd」の形式で入力したものをフォーカスが移動した時点で、自動的に「yyyy/mm/dd」の表示形式に変更して表示し、なおかつフォームデータを送信したした時のデータは「yyyymmdd」の形式で送信したいと思っています。(※データベース上はyyyymmddの為) 同様のスクリプトを探してみたのですが、なかなか見つからず困っています。 Javascriptではなく、他の方法でも可能な方法があればそちらでもかまいません。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
onFucusとonBlurで整形するといいのでは? もちろん応用で送信するときにyyyymmddにすることは 可能ですが、そもそも「データベース上はyyyymmddの為」 ということはなんのインジェクションもなしにデータ ベースに挿入しようとしていますので、これは問題外。 破壊的なデータを送られてきたらどうするつもりでしょう? 送る側でやってもいいですが、送られてきた側がサーバー上 のプログラムでデータの整合性をみてスラッシュを はずす方が効率的だと思います。 ただ普通はデータベースならDATE型で管理する物なので この手の作業は発生しませんが・・・。 <script type="text/javascript"> function dateFormat(obj,flg){ var str0=obj.value if(flg){ if(str0==""){ return }else if(str0.match(/[0-9]{8}/)){ str1=str0.substring(0,4)+"/"+str0.substring(4,6)+"/"+str0.substring(6,8) obj.value=str1 }else{ alert("8桁の数字を入力してください") obj.value=""; } }else{ str1=str0.split("/").join(""); obj.value=str1 } } </script> <form> <input type="text" size="15" onBlur="dateFormat(this,true)" onFocus="dateFormat(this,false)"> </form>
その他の回答 (1)
- VCAT
- ベストアンサー率20% (16/79)
「なおかつフォームデータを送信」するのなら、やはりきちんとした日付チェックが必要です。 >>1さんの数字の桁数だけでは不安です。閏年とか後で面倒なことにもなるし、 「/」で区切るなら、その瞬間を利用すればチェックもそう面倒でないはず。 老婆心ですが。
お礼
いえいえ、老婆心大歓迎ですよ。 日付のチェックは面倒ですよね。 だからといってはなんですが、どうしても色々な人達が提供してくれている日付チェックのソースに頼ってしまう自分がなさけないです・・・。 サーバー送信無しにそのようなチェックができればなおいいと思っていますので、徐々に変更していこうと思っています。
お礼
ご回答ありがとうございます。 おっしゃるとおりDB上へ登録する際にはなんらかのチェックが必要ですよね^^;サーバー上のプログラムでチェックするようにしたいと思います。 見た目の問題でユーザーが入力したデータが「yymmdd]のままだと不安がられやしないか?といったところからの発想でこのような要望をあげてみました。誰が入力しても「/」が入れば見た目で納得できるかなぁと・・。 あさはかですが・・。 回答いただいたスクリプトを利用させていただきたいとおもいます。 ありがとうございました。