preg_match
日付がパターンに含まれているかどうかを確認するために使用する正規表現が必要DD/MM/YYYY
です。以下のコードを試しましたが、うまくいきませんでした。
preg_match("#^[1-31]*1[1-12]*1[1950-2013]?#", $date);
正規表現は次のように変換されます。
- 文字列の先頭から、
- 1から3の範囲の任意の数の文字、または文字1を探します
- 文字通り1を探す
- 1から1の範囲の任意の数の文字、または文字2を探します
- 文字通り1を探す
- 文字1、9、5、0から2、0、1、または3のいずれか1つまたは0を探します
それは明らかに意味がありません。
日付は定期的ではないため、正規表現で日付を検証することはできません。毎月の日数、うるう年、その他たくさんのものがあります。日付を細かく分けて(使用explode
)、次のように確認することをお勧めします。checkdate()
あなたの正規表現は非常に間違っているので、どこから説明を始めればよいのかさえわかりません。
しかし、最も簡単な答えは、これに正規表現を使用しないことです。PHPには、すでに完全に優れた日付処理ルーチンがあります。たとえば、DateTime::createFromFormat()
..。
$date = DateTime::createFromFormat('Y/m/d', $dateString);
echo $date->format('j-M-Y'); //outputs something like '15-Feb-2009'
http://www.php.net/manual/en/datetime.createfromformat.phpを参照してください
使用することはできますpreg_match("/^\d{1,2}\/\d{1,2}\/\d{4}/",$date);
が、追加の検証を実行する必要があるため、正規表現はこのタスクには適していません(たとえば、「9999」は有効な年です)。代わりに、次のdate_parse_from_format()
ように確認することをお勧めします。
date_parse_from_format('d/M/Y', $date);
詳細については、PHPでの文字列の日付への変換を参照してください。