2013-05-12 2 views

ответ

0
<?php 

$date = '2009/10/22'; 

if (preg_match('/^(?:(19[0-9]{2}|20[0-9]{2}))\/(0[1-9]|1[012])\/(0[1-9]|[12][0-9]|3[01])$/', $date)) { 

    echo $date , ' is a valid date format.'; 

} else { 

    echo $date , ' is not a valid date format!'; 

} 

?> 

Также убедитесь, что вы используете checkdate() функции в дополнение к этому.

+1

Спасибо! Это правильный ответ –

0

Попробуйте это:

if (preg_match('#^\d{4}/\d{2}/\d{2}$#', $date)) { 
... 
} 

Это будет соответствовать только дату, но вы должны убедиться, что дата действует также, например, нет такой вещи, как 31 февраля

+0

Спасибо, но есть код согласования даты, такие как 2009-11-12 Вот этот код: если (is_string ($ значение) && preg_match ('/^(\ d {4}) \/(\ d {2}) \/(\ d {2}) ((\ d {2}): (\ d {2}) (: (\ d {2}))?)? $/', $ value , $ m)) , но я хочу, например, сопоставить 2009/11/12. Здесь значение - это строка даты –

+0

Именно это и соответствует моему коду. Вы даже не пробовали, не так ли? – silkfire

0

Вы можете сделать это, как это - проверить формат первого, а затем использовать checkdate() для проверки значения:

$value = '2009/10/22'; 

echo valid_date($value) ? "Yep, $value is a valid date" : "Nah, it's not valid"; 

function valid_date($value) 
{ 
    return preg_match('/^(?:(\d{4,})\/(\d{2})\/(\d{2}))$/', $value, $matches) === 1 && checkdate((int)$matches[2], (int)$matches[3], (int)$matches[1]); 
} 

Plain preg_match() просто не будет резать.

Смежные вопросы