LoginSignup
8
9

More than 5 years have passed since last update.

日付、日時の正規表現についてまとめ(基礎知識・正規表現例)

Last updated at Posted at 2018-11-13

まえがき

  • PHP、JavaScriptで判定
    ( 正規表現チェッカーを使用
    http://okumocchi.jp/php/re.php)
  • 正規表現について、どうしても苦手意識があり、
    調べて出てくる多数の正規表現サンプルを見ても、
    やはり書くのに時間がかかってしまう...理解ができない...
    といったことがあったので、今後忘れないようにメモとして書かせて頂きます。
  • 「正しい形式しか許容しない」というのが前提になっております。

例(単体使用)

  • 「Y/m/d」ex).2018/01/01
  • ^→開始
  • $→終了
  • [0-9]→0~9の数字
  • /」の前にバックスラッシュが必要
  • { }の中に、数字の桁数を指定
  • 年は西暦のため、4文字→{4}
    時間、分は2文字→{2}
    (+(1回以上)だと2018/01/111111も許容してしまう
    先頭の0を表示しない場合は、1文字以上2文字以下となるため{1,2})
/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}$/
  • 「h:i」 ex).02:11
/^[0-9]{2}:[0-9]{2}$/
  • 「Y/m/d - Y/m/d」(範囲指定)ex).2018/01/01 - 2018/01/02
  • \s→空白文字
/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}\s-\s[0-9]{4}\/[0-9]{2}\/[0-9]{2}$/

例(組み合わせ)

  • 「Y/m/d - Y/m/d」、「Y/m/d h:i」、「Y/m/d」を許容する
  • 「- Y/m/d」と「h:i」を()?でくくる
  • ?→0回か1回
  • 「|」→OR表現(「Y/m/d - Y/m/d h:i」を許容しないため)
/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}(\s-\s[0-9]{4}\/[0-9]{2}\/[0-9]{2}|\s[0-9]{2}:[0-9]{2})?$/

どうしても正規表現ってごちゃごちゃ文字が並んでいるイメージを抱いてしまい、
見た瞬間に思考が停止してしまいがちです。
ですが、簡単な表現を最初に書いて、([0-9]など、ぱっと見で意味が理解できる箇所)
正規表現チェッカーでその都度、動作確認をしていきながら書いていくのが
一番効率的だと漸く気がつけました。

参考リンク
https://javascript.programmer-reference.com/js-regexp-sample/
https://www.megasoft.co.jp/mifes/seiki/meta.html
https://www.sejuku.net/blog/22396

8
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9