こんにちは。
コンテンツの日付(手段はもう、いなくなった別の人に作ってもらったので不明)
を抽出し、抽出された値がYYYY/MM/DD 形式になっているのか
チェックをしたいです。
抽出された値は、変数$datechkに入っています
2008/9/23 13:59
そこで、下記のコードで試したのですが、
if($datechk.match(/^\d{4}\/\d{2}\/\d{2}$/)){OK;}else{NG;}
if($datechk.match(/^\ggg年\mm月\dd日$/)){OK;}else{NG;}
if(String($datechk).match(/^ggg年mm月dd日$/)){OK;}else{NG;}
のいずれで実施しても「OK」が返ってきてしまいます。
何をやってもtrueになってしまうので正しく本当に書式チェックが
されてない状態です。
恐れ入りますが、何が問題なのかご指摘頂けませんでしょうか。
また、とある値が文字列なのか、日付型なのか、チェックする方法は
ございますでしょうか。
ご教授お願いしますm(__)m。
No.3ベストアンサー
- 回答日時:
>なるほど、後ろの$の意味がが良くわかりました!
>上記コードの結果は2008/09/02 12:34:56の内、2008/09/02が抽出されるのですね!
抽出されるのは、年、月、日、時、分、秒です
>if(String($datechk).match(/^ggg年mm月dd日$/)){OK;}else{NG;}
エラーは出ないけど、正規表現でggなんてあるの?
>(ちなみに$datechkですが、$をつけないと変数の中身を参照できないと思います。。。)
ってもしかしてPHPと勘違いしてませんか?
質問する前に、以下のような簡単なプログラムを書いて、実行して
なぜ?なに?を確認してみてましょう!
<html>
<script>
var datechk=$datechk='2008/09/02 12:34:56';
day=(datechk.match(/^(\d{4})\/(\d{1,2})\/(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/));
alert('平成'+(day[1]-1988)+'年'+day[2]+'月'+day[3]+'日 '+day[4]+'時'+day[5]+'分'+day[6]+'秒');
alert(datechk.replace(/^(\d{4})\/(\d{1,2})\/(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/,'$1-$2-$3'));
if(String(datechk).match(/^ggg年mm月dd日$/)) alert('ok'); else alert('no');
datechk='h20/09/23';
if(datechk.match(/^[HhSsTtMm]\d{1,2}\/\d{1,2}\/\d{1,2}$/)) alert('和暦です');
if('p20/09/23'.match(/^[HhSsTtMm]\d{1,2}\/\d{1,2}\/\d{1,2}$/)) alert('和暦です'); else alert('何それ');
var s='更新日は、2008/09/23 に行われました';
if(s.match(/.*\d{4}\/\d{1,2}\/\d{1,2}.*/)) alert('西暦年が含まれています');else alert('何それ');
var s='更新日は、2008 / 09 /23 に行われました';
if(s.match(/.*\d{4}\/\d{1,2}\/\d{1,2}.*/)) alert('西暦年が含まれています');else alert('何それ');
</script>
pipi様
折角、取り急ぎのご回答を頂いたにも関わらず、
ご連絡が遅くなり大変申し訳ございませんでした。
小職にとってJavaScriptは始めたばかりのスクリプト言語
でして、思った以上に苦戦しております(現在も(汗))。
なので、このようなご解説を頂き、pipi様のお力に驚き、
感謝の気持ちでいっぱいになりました。
ありがとうございました!
No.2
- 回答日時:
>>実はすべてOKじゃなくてすべてNGになっているのでは?
>について、詳細をご指摘頂けますでしょうか。
参照値が'2008/9/23 13:59'
しかし、正規表現では、/^\d{4}\/\d{2}\/\d{2}$/になってます
無理くり日本語にすれば、
文字列の先頭が数字が4個あり、次に/があり、数字が2文字あり、
/があり、数字が2文字で、終了しているものと合っているか?
この表記では、9月の文字が1つだけのとき合致しない。
まして、日は二文字あれば終わりでなければならないのに
時間がある。だからtrueを返えせない!
もし最後の$が無い場合
2008/09/12345678 でも合致してしまう。
なので\d{1,2}を訳すと、数字が1文字以上2文字以下で合致する
つまり9月でも09月でも合致する
ちなみに
alert('2008/09/02 12:34:56'.match(/^(\d{4})\/(\d{1,2})\/(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/));
でそれぞれの値を配列で返す
この回答への補足
pipi様
レスありがとうごあいます。
>2008/09/12345678 でも合致してしまう。
>なので\d{1,2}を訳すと、数字が1文字以上2文字以下で合致する
>つまり9月でも09月でも合致する
>ちなみに
>alert('2008/09/02 12:34:56'.match(/^(\d{4})\/(\d{1,2})\/(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/));
なるほど、後ろの$の意味がが良くわかりました!
上記コードの結果は2008/09/02 12:34:56の内、2008/09/02が抽出されるのですね!
match関数で使うために、変数に入っている値を強制的に文字列に入れる
(値の中身が何型かわからないので)に入れる方法は下記方法でよろしいでしょうか。
var datechk2=$datechk;
※$datechkには2008/09/02 12:34:56が入っている。
これを下記にあてはめる
alert($datechk.match(/^(\d{4})\/(\d{1,2})\/(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/));
で
if(datechk.match(/^\d{4}\/\d{1,2}\/\d{1,2}/)){OK;}else{NG;}
でOKを返す。逆に
if(String($datechk).match(/^ggg年mm月dd日$/)){OK;}else{NG;}
ならNGになる
(ちなみに$datechkですが、$をつけないと変数の中身を参照できないと思います。。。)
との認識で宜しいでしょうか。
No.1
- 回答日時:
実はすべてOKじゃなくてすべてNGになっているのでは?
その変数のあたまに$をつけるのをやめたほうがよいでしょう。
(他の言語と競合する可能性もあるので)
<script>
var datechk="2008/9/23 13:59";
if(datechk.match(/^\d{4}\/\d{1,2}\/\d{1,2}/)){document.write(0);}else{document.write(1);}
if(datechk.match(/^\d{4}\/\d{2}\/\d{2}$/)){document.write(0);}else{document.write(1);}
if(datechk.match(/^\ggg年\mm月\dd日$/)){document.write(0);}else{document.write(1);}
if(String (datechk).match(/^ggg年mm月dd日$/)){document.write(0);}else{document.write(1);}
</script>
この回答への補足
yambejpさま
こんにちは。早速のご回答ありがとうございます。
>その変数のあたまに$をつけるのをやめたほうがよいでしょう
ご指摘ありがとうございます。
但し、既に別の方が書かれた変数にあらかじめ入っており、
いまのところそこからしか抽出する方法がないので、
下記方法で対応しようと思います。
var datechk2=$datechk;
また、大変恐れ入りますが、
>実はすべてOKじゃなくてすべてNGになっているのでは?
について、詳細をご指摘頂けますでしょうか。
少なくともはじめのコードについては正確なURLはおぼえておりませんが、サンプル集より採用したものであり、問題点が私の力では見つかりません。
if(datechk.match(/^\d{4}\/\d{1,2}\/\d{1,2}/)){document.write(0);}else{document.write(1);}
但し、上記については、秒まで指定してないのに、OKになってしまうのが不思議です。
2行目以降は私のほうで手を加えましたのが、なぜか、値の書式(2008/9/23 13:59)と異なるもの(\ggg年\mm月\dd日)で比較
しようとしているので、NGを返してほしいのですが、
OKになってしまいます。
当方の勉強不足ですが、使用方法含め、誤りのご指摘を頂けませんでしょうかm(__)m。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/01/23 17:13
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Access(アクセス) エクセルのVBAについて教えてください。 4 2023/01/21 10:21
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 09:24
- Excel(エクセル) VBAで “:” を含むセルの特定 2 2023/05/11 16:30
- MySQL SQLについて質問です。 SELECT TO_CHAR(TO_DATE('90-10-08.'YY- 4 2022/05/13 20:55
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ウェブ上にキーボードを作りた...
-
テキストボックスに入力された...
-
<a>タグのテキストを取得
-
google apps scriptの終了のさせ方
-
同じIDで定義した要素の配列を...
-
javascriptのdocument.allにつ...
-
jspからjavascriptの変数引継ぎ
-
static constメンバ変数(配列)...
-
明日・明後日・明々後日
-
Boolean型配列中のTrueの有無を...
-
Javascriptの丸括弧の意味
-
idを使わずにonclickで自身の要...
-
Excel VBA の ChangeFileAccess
-
GASでundefinedエラーが出ます
-
javascriptで行を抽出したいです。
-
ActiveXobjectが作成できない
-
ASP.NETのコントロールの値をJa...
-
C#OpenCv V4にのエラーに関する...
-
【正規表現】【javascript】CR...
-
jQueryの :not() .not() が有効...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
window.openでタイトル名の指定
-
document.writeで画面が消える
-
なぜ、ジャバスクリプトが表示...
-
ホームページに日付を自動更新...
-
java カレンダーの日付指定で...
-
ジャバスクリプトで空白(スペー...
-
今日の月と日付の1週間後や3日...
-
○歳△ヶ月と×日を計算してくれる...
-
JavaScriptで、1枚だけ画像表...
-
<HTML>文章をメモ帳に書いてブ...
-
テキストボックスに入力された...
-
変数セットの検査
-
java scriptでの表示件数の制御...
-
問題の個数を数える。
-
document.clear()の使い方について
-
JS、document.write出力位置設定
-
セレクトボックスの内容に応じ...
-
n回繰り返し書き出す
-
JavaScriptでブラウザの判別を...
-
JAVAで時刻に対して簡単な四則...
おすすめ情報