【正規表現】日付の判別、チラ裏メモ。

コーディング

最近正規表現使うことがあまり無かったのでメモφ(・

検出したいパターン別にコピペ用

  • yy/mm/dd のみを検出( 2022/03/04 など)
    /^[0-9]{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])$/
  • yy/m/d を許容する(2022/03/04 でも 2022/3/4 でもいい)
    /^[0-9]{4}\/(0[1-9]|[1-9]|1[0-2])\/(0[1-9]|[1-9]|[12][0-9]|3[01])$/
  • yy-mm-dd のみを検出( 2022-03-04 など)
    /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/
  • yy-m-d を許容する(2022-03-04 でも 2022-3-4 でもいい)
    /^[0-9]{4}-(0[1-9]|[1-9]|1[0-2])-(0[1-9]|[1-9]|[12][0-9]|3[01])$/

実際の記述コピペ用

javascript

let date = "2022/02/16";

// javascriptでは正規表現をクォーテーションで囲まない
date.match(/^[0-9]{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])$/);
// または
const reg = /^[0-9]{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])$/;
date.match( reg );

// 戻り値はこんな感じ
// ['2022/02/16', '02', '16', index: 0, input: '2022/02/16', groups: undefined]
// 0: "2022/02/16"
// 1: "02"
// 2: "16"
// groups: undefined
// index: 0
// input: "2022/02/16"
// length: 3

// matchしない場合は null を返す

PHP

$date = "2022/02/16";
$reg = preg_match("/^[0-9]{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])$/",$date,$matches);

// $reg は true/false を返し、matchの内容は$matchesに書き込まれる
var_dump($matches);
/* 
array(3) {
  [0]=> string(10) "2022/02/16"
  [1]=> string(2) "02"
  [2]=> string(2) "16"
}
*/

// matchしない場合は $matchesは空配列を返す