Ne AA / GG / YYYY düzenli ifade nedir ve nasıl php kullanırım?

7 Cevap php

I http://www.regular-expressions.info/regexbuddy/datemmddyyyy.html de AA / GG / YYYY için normal ifadeyi bulundu ama ben doğru onu kullanıyorum sanmıyorum.

İşte benim kod:

$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 bu çalıştırdığınızda o tersini söyleyerek gerektiğini, o hala, 'bu tarih doğru biçimlendirilmiş değil' yankıları. Nasıl bu düzenli ifade php kurarım?

7 Cevap

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'];    

Onun muhtemelen daha iyi bir unix zaman damgası hemen hemen her insan tarafından okunabilir tarih formatına dönüştürmek olacak strtotime () kullanın. - http://php.net/manual/en/function.strtotime.php

Sen correct delimiters desen etrafında gerekir.

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

siz de checkdate() işlevini kullanabilirsiniz. Gerek regex.

$str="03/22/2010";
list($mth,$day,$yr)=explode("/",$str);
var_dump(checkdate($mth,$day,$yr));

PHP kodu tarihleri ​​doğrulamak için bu regex kullanmak için, PHP gebelik fonksiyonları gerektiren olarak doğru ek regex sınırlayıcı bir dize olarak biçimlendirmek gerekir. Ayrıca tüm dize maç (ya da başka bir maç için başarısız) için regex zorlamak için çapa eklemeniz gerekir:

$date_regex = '%\A(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d\z%'; 

$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';   
} 

Tabii ki, bir kütüphane çağrısının bu durumda daha iyi olurdu. Regex gibi 31 Şubat gibi geçersiz tarihleri ​​verir.

Tarihlere ait bir dize taramak isterseniz regex yararlı olabilir. Bu durumda çapa gerekmez. Hala geçersiz tarihleri ​​dışlamak için ekstra bir kontrol gerekebilir. Bu sizin giriş sadece geçerli bir tarih ya da içeren bilmek olup olmadığına bağlıdır.

Sizin regex sınırlayıcı gerekir:

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

Bu MM/DD/2014 için MM/DD/1960 geçerli tarihleri ​​denetler

Ayrıca M/D/YYYY ve 0M/0D/YYYY gibi tarihlerini kabul

^(?:[1-9]|0[1-9]|1[0-2])/(?:[0-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])/(?:20[6-9][0-9]|20[0-1][0-4])$