Sorun delimeters biri olan ve (diğerleri de söylediğim gibi) karakterleri olduğunu. Bu çalışacaktır:
$date_regex = '/(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d/';
$test_date = '03/22/2010';
if(preg_match($date_regex, $test_date)) {
echo 'this date is formatted correctly';
} else {
echo 'this date is not formatted correctly';
}
Ben ifade başında ve biten bir eğik çizgi eklenmiş ve (bir arka çizgi ile) desen ileriye eğik escapped unutmayın.
Bir adım daha ileri götürün, bu model doğru ... yıl sadece yüzyıl ayıklamak olmaz. Eğer emin olmak istiyorsanız /(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.]((?:19|20)\d\d)/
ve (Jan aşağıda belirttiği gibi) onu değiştirmek gerekiyordu daha {gibi bir şey ile gitmek isteyeceksiniz (yerine bir kısmını da) bütün dize eşleşmeleri [(1)]}.
Diğerleri de söylediğim gibi sadece tarih almak için çalışıyorsanız, strtotime() daha iyi bir seçenek olabilir. Bu hemen hemen her yaygın olarak kullanılan biçimi ayrıştırmak ve size bir Unix zaman damgası verecektir. Bu gibi kullanabilirsiniz:
$test_date = '03/22/2010';
// get the unix timestamp for the date
$timestamp = strtorime($test_date);
// now you can get the date fields back out with one of the normal date/time functions. example:
$date_array = getdate($timestamp);
echo 'the month is: ' . $date_array['month'];