PHP で MM/DD/YYYY 日付正規表現を作成する

Subodh Poudel 2022年1月22日
PHP で MM/DD/YYYY 日付正規表現を作成する

このチュートリアルでは、PHP で mm/dd/yyyy 日付形式の正規表現を作成する方法を示します。

PHP で MM/DD/YYYY 日付正規表現を作成する

正規表現を使用して、式に適用されたルールに従ってユーザー入力を検証できます。正規表現を使用して入力を検証できます。また、正規表現を使用して mm/dd/yyyy 日付形式を検証することもできます。

正規表現を作成して変数に格納できます。preg_match() 関数を使用して、正規表現でランダムな日付形式の入力をテストします。

日付形式 mm/dd/yyyy の正規表現パターンを以下に示します。詳細に説明します。

~(0[1-9]|1[012])[-/](0[1-9]|[12][0-9]|3[01])[-/](19|20)\d\d~

正規表現パターンには、常に正しい区切り文字が含まれている必要があります。ここで、~記号はパターンを囲む区切り文字です。

次に、月の形式を mm/dd/yyyy で記述する必要があります。

月は 01-12 の形式で表されます。したがって、月の最初の桁は 0 または 1 のいずれかになります。したがって、01-09 から始まる月には 0[1-9] と記述します。括弧内の 1-9 は、0 の後に書かれた番号を示します。

同様に、1 で始まる月の 1011、および 12 のみを書き込むことができます。したがって、1 の括弧内に 0121[012] と表記しました。

|を使用します論理 OR を実現するための記号。したがって、これを使用してルールを (0[1-9]|1[012]) として分離します。

最後に、セクションの終わりを示すために、パターンを括弧で囲みます。

次に、区切り文字のルールを mm/dd/yyyy の形式で設定する必要があります。上記のパターンでは、記号 -/、およびの区切り記号を使用できます。

今、私たちは何日もパターンを書きます。日は 1-30 であるため、01-090[1-9]10-2912[0-9]、および日は 0[1-9] と書くことができます。30-313[01] と書くことができます。

mm/dd/yyyy の形式で、日以降の区切り文字にも同じルールを使用します。

年の最初の 2 桁として 19|20 と表記しました。つまり、年は 1920 からのみ開始できます。19|20 の後にあるパターン\d\d を使用して、19 または 20 の後に続く任意の 2 桁を示します。

これが上記の正規表現の仕組みです。上記の正規表現を使用して、いくつかのテスト日付形式を確認できるようになりました。

そのために、変数 $reg を作成し、上記で記述した正規表現をその中に格納します。次に、配列 $ date を作成し、これらのランダムな日付形式を保存します。

['03/22/2021', '22/22/2021', '03\22\2021', '03-22-2021', '03/22/1865']

次に、foreach ループを使用して、$dates 変数を $date としてループします。preg_match() 関数を使用して、$date 変数を $reg 変数と比較します。

これにより、テスト入力が mm/dd/yyyy 形式の正規表現パターンに準拠しているかどうかを確認できます。

サンプルコード:

$reg = '~(0[1-9]|1[012])[-/](0[1-9]|[12][0-9]|3[01])[-/](19|20)\d\d~';

$dates =['03/22/2021', '22/22/2021', '03\22\2021', '03-22-2021', '03/22/1865'] ;
foreach($dates as $date){
 if(!preg_match($reg, $date)) {
 echo 'the date format '.$date.' is incorrect'."<br>"; 
 } else{
 echo 'the date format '.$date.' is correct'."<br>";
 } 
}

出力:

the date format 03/22/2021 is correct
the date format 22/22/2021 is incorrect
the date format 03\22\2021 is incorrect
the date format 03-22-2021 is correct
the date format 03/22/1865 is incorrect

ここでは、最初の形式はすべてのルールに従います。月を 22 にすることはできないため、2 番目の形式は正しくありません。

\セパレータを指定していないため、3 番目のものは正しくありません。 - 区切り文字を指定したので、4 番目の日付が正しいです。年は最後の年の 1800 年代なので、正しくありません。

著者: Subodh Poudel
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn

関連記事 - PHP Date

関連記事 - PHP Regex