Gibi bir tarih doğrulamak için kullanmak doğru düzenli ifade nedir. 2009-10-22 veya 2009-01-01 vb Platformu PHP
This (dan regexplib.com) bu istediğini eşleşen ve artık yıl boyunca denetimleri gerçekleştirmek, o istediğinizden daha ayırıcılar biraz daha hoşgörülü bulunuyor gün Ayda vs, ancak kolaylıkla tespit edilebilir. Gördüğünüz gibi, oldukça iğrenç birşey.
Alternatif olarak (ve tercihen bence) sadece doğru yerlerde rakamlar için kontrol edin ve daha sonra kod sıçrama yıl ve gün başına aylık denetimleri gerçekleştirmek isteyebilirsiniz. Bazen bir sıradanifade kadar anlaşılabilir değildir ve yanlış tam olarak ne rapor edebilirsiniz beri daha fazla netlik (kodda açıkça kontrolleri yerine var - daha ziyade bir "model eşleşmiyor" mesajı, daha "Kasım ayında sadece 30 gün", yararsız yanında)
Eğer 2009/02/28 kabul uğraşmak değil ama 2009/02/29 2008/02/28 kabul etmek zorunda gibi 1 regex verebilir düşünüyorum, daha fazla mantık gerekir. (Birisi bunu göstermek eğer Ama ben etkilendim olurdu)
Dönüştürme başarısız veya size dil bir onay tarih işlevi vardır eğer kullanıyorsam bir tarihe dönüştürmek ve rapor çalışacaktı.
\d{4}-\d{2}-\d{2}
bu formda dize maç olacak, ama tarihin geçerli olup olmadığını kontrol etmek, Bu yıl, ay ve gün için bu dizeyi (Bunun için bu regexpi kullanabilirsiniz) parça kırmak ve her kontrol etmek olsaydı onları.
Siz ayrıca, yıl 1 veya 2 ile başlaması gerekir emin olabilirsiniz: [12]\d{3}-\d{2}-\d{2}
, ve aynı zamanda ay ve gün için aynı şeyi yapabilirsiniz: [12]\d{3}-[01]\d-[0123]\d
(ama ilk önce gitmek istiyorum sıradanifade ve karşılaştırın parçaları "elle")
Tamam, ay ve gün aralıklarını doğrulamak bir regex olabilir
[0-9]{4}-(?:1[0-2]|[1-9])-(?:3[01]|[12][0-9]|[1-9])
Eğer 1900-2050, diyelim ki, yıllar kısıtlamak istiyorsanız, sizinle bitebileceğini
(?:2050|20[0-4][0-9]|19[0-9]{2})-(?:1[0-2]|[1-9])-(?:3[01]|[12][0-9]|[1-9])
Bunlar 31 Şubat gibi "kurnazca yanlış" tarihleri yakalamak değil, bu yüzden aklı kontrol regex dışında gerçekleştirilmesi gereken bu gerçekten oldukça açık.
Tam bir doğrulama (gün, ay ve yıl parça geçerli olduğunu doğrulayarak dahildir) için bir Regex seçim aracı değildir. Ay arayla konulardan artık yılları ile derde girer istiyorum ...
Sadece kaba biçimi doğru olup olmadığını kontrol edin, ya da farklı bölümleri (yıl-ay-gün) izole etmek istiyorsanız Yani, bir regex gayet iyi.
([0-9]{1,4})-(1[012]|0?[1-9])-([12][0-9]|3[01]|0?[1-9])
, Ayrıştırma için hazır Bu oldukça kesin zaten ve yıllık yakalama gruba (0 .. 9999), ay ve gün yakalar ...
Eğer düzenli bir ifade daha güvenebilirsiniz eğer, POSIX kullanarak bir hibrit çözüm tarih fonksiyonları () ve time () PHP ile teslim edilen bu gibi görünebilir:
<?php
date_default_timezone_set("GMT");
function validateDate($date)
{
if (preg_match("^[0-9]{4}-[0-9]{2}-[0-9]{2}^", $date))
{
return date('Y-m-d', strtotime($date)) === $date;
}
return false;
}
// Some tests
$dates = array(
'2009-09-09', '2009-09-32', '2009-31-00', '2035-01-02',
);
foreach($dates AS $date)
{
echo $date .': '. (validateDate($date) ? 'OK' : 'FAILS') ."\n";
}
?>
Bu zarif değil artı (00:00:00 GMT 19 Ocak 2038 03:14:07 GMT 1 Ocak 1970) Unix Epoch zaman sınırlı olacak, ama güvenilir ve iyi PHP desteklenen.