
こんばんは、いつもお世話になっております。
過去ログをあさってみたのですが、探し方が悪いのか
見つけられず…。
どうかご指導よろしくお願い申し上げます。
フォームに入力された値のチェックを、CGIに渡す前に
ジャバスクリプトでもチェックしたいと思っています。
未入力や半角英数字以外のエラーチェックは出来たのですが
yyyy/mm/dd形式で日付の入力をして欲しい時の
チェックの書き方がわかりません。
私なりに色々と調べてみて、
if(myForm.day.value.match(/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}$/)){
alert("日付は半角でyyyy/mm/dd形式でご記入下さい");
return false;
}
と記述してみたのですが、9999/99/99のような、ありえない
日付でも通ってしまいます。
そればらば、とおもい
if(myForm.day.value.match(/^[2-3][0-9][0-9][0-9]\/[0-1][0-9]\/[0-3][0-9]$/)){
alert("日付は半角でyyyy/mm/dd形式でご記入下さい");
return false;
}
と書いてみたのですが、こちらはエラーが出ました(泣)
どうか、ご指導よろしくお願い申し上げます。
No.3ベストアンサー
- 回答日時:
以下、サンプルです。
厳密なチェックは不要との事でしたが両方用意してあるので好みで好きな方を残してください。
<html>
<head>
<title></title>
<script type="text/javascript">
function _checkDate(objName) {
var Value = document.getElementsByName(objName)[0].value;
//形式チェック
if(! Value.match(/^(\d{4})\/(\d{2})\/(\d{2})$/)) return false;
//年月日を取り出し
var sYear = parseInt(RegExp.$1);
var sMonth = parseInt(RegExp.$2);
var sDay = parseInt(RegExp.$3);
//以下7行は年/月/日の個別のチェック
if(sYear<2000) return false;
if(sYear>2999) return false;
if(sMonth<1) return false;
if(sMonth>12) return false;
if(sDay<1) return false;
if(sDay>31) return false;
return true;
//以下7行は日付の厳密な妥当性チェック
if(sYear<2000) return false;
if(sYear>2999) return false;
var oDate = new Date(Date.parse(Value));
if(oDate.getFullYear() != sYear) return false;
if(oDate.getMonth() != (sMonth-1)) return false;
if(oDate.getDate() != sDay) return false;
return true;
}
</script>
</head>
<body>
<input type="text" size="15" name="date1">
<input type="button" value="CHECK"
onclick="alert(_checkDate('date1'))">
</body>
</html>
なお、「javascript 日付 チェック」で検索すれば色々なタイプのサンプルコードが見つかります。
steel_grayさま。
ご指導ありがとうございました。
ばっちりでした!
「javascript 日付 正規表現」で探しておりました…。
ありがとうございました。
No.2
- 回答日時:
JavaScriptは得意でないのでちょっとPerlで書いてみました。
JavaScriptでもそのまま使える表現のみ使っているはずなのでプログラム部分を
JavaScriptにすればOKだと思います。
とりあえず
・年の部分は2000~2999のみを受け付ける
・月の部分は0~12を受けつけ、1~9月は0が前置されているものとする
・日は月にかかわらず1~31まで受け付ける
という方針です。
use strict;
use warnings;
while (<DATA>) {
chomp;
if (/^2[0-9][0-9][0-9]\/(0[1-9]|1[12])\/(3[01]|[12][0-9]|0[1-9])$/) {
print "vaild: $_\n";
}
else {
print "invalid: $_\n";
}
}
__END__
1999/12/31
2000/01/01
2000/13/01
2999/12/31
2999/12/32
3000/01/01
2345/6/15
2001/06/31
2001/02/29
こんばんは。
なんどもご指導ありがとうございました。
while (<DATA>) {
の部分に
while ($hoge) {
と入れて試していたのですが、yyyy/mm/dd形式で
入力しているのに、エラーが出てしまいました…(泣)
今回は、NO3様にご指導頂いた方法で行こうと思います。
ありがとう御座いました。
No.1
- 回答日時:
・年は何年まで許されるのか明確でない
・一月あたりの日数は月によって異なる、特に2月はうるう年による違いがありうる
という事情があるので、正規表現だけでやるのはやめておいたほうが
無難だと思います。形式のみのチェックは正規表現でやるにしても
その先のチェックは別個にやったほうが楽でしょう。
sakusaker7様。
こんばんは。
ご指導ありがとうございます。
厳格な日付の入力チェックはとりあえず置いておこうと
考えております。
年は2000年以降2999年までをOKとし、うるう年の
チェックは無しで、とりあえず半角数字の
yyyy/mm/dd(2006/07/30)という形式であればOKと
したいのです。
どうかご指導よろしくお願い申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 09:24
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Access(アクセス) エクセルのVBAについて教えてください。 4 2023/01/21 10:21
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/01/23 17:13
- Access(アクセス) アクセスで教えてください。 クエリで2日前を抽出する計算式を 入力して表示させると ちゃんとyyyy 1 2023/06/08 21:05
- Excel(エクセル) 【vba】日付の形式が勝手に変わってしまう。 1 2022/09/29 10:54
- Excel(エクセル) Excel 数行を1組とする300組ほどあるデータの項目を揃えたいです。 3 2023/01/26 19:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
return trueとreturn falseの用...
-
formについて質問
-
テキストボックスにデータがあ...
-
一度しか押せないボタンについて
-
slickのレスポンシブ > center...
-
チェックボックスの有無判定
-
分岐数といえば
-
2次元配列で2項目についてソー...
-
JavaScript ログアウト処理
-
COBOLの数字チェック
-
ラジオボタンのNullチェック
-
HTMLの表示内容にfor文を使...
-
Selectボックスの幅を自動で広...
-
JavaScriptのfileオブジェクト...
-
プルダウンメニューのvalue値を...
-
ラジオボタンにタブインデック...
-
表の値をすべて書き込みたい
-
配列のチェックボックスをjavas...
-
cleartextを二つする
-
プルダウンメニューリンクを新...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
return trueとreturn falseの用...
-
slickのレスポンシブ > center...
-
ドロップダウンリストボックス...
-
COBOLの数字チェック
-
ツリービューのチェックボック...
-
Visual Studioのデザインでの非...
-
【javascript】 年齢計算
-
フォームの入力チェックをする...
-
ラジオボタンのNullチェック
-
Tabキーでのカーソルの移動...
-
文字列がA-F 0-9であるかチェ...
-
2次元配列で2項目についてソー...
-
JavaScriptde途中で、「exit」...
-
TEXTAREAに入力した改行コード...
-
未入力のラジオボタンに、alert...
-
!!winVar
-
チェックに応じて違うチェック...
-
チェックボックスのチェック。...
-
リロードしないようにするには
-
度胸試しのJavaScript
おすすめ情報