2014-09-16 3 views
1

По какой-то причине это всегда возвращает false ... при вводе «2014 12 12» в форму. Именно этот формат входит в базу данных.Дата Регулярное выражение Не возвращается True

$date = trim($_POST['date']); 

в моем library.php я есть:

function validateDate($date) { 
    if(preg_match('/^[0-9]{2,4}[\-[[:space:]]]{1}[0-9]{1,2}[\-[[:space:]]]{1}[0-9]{1,2}$/',$date)){ 
     return true; 
    } 
    else{ 
     return false;  
    } 
} 

и в моем PHP у меня есть:

if (validateDate($date)){ 
    $dateCSS = 'style="border-color: #98faad;"'; 
} 
else { 
    $dateCSS = 'style="border-color: red;"'; 
    $flag = false; 
} 

ответ

1

Попробуйте это регулярное выражение:

^[0-9]{2,4}[\-[:space:]]{1}[0-9]{1,2}[\-[:space:]]{1}[0-9]{1,2}$ 
0

Более надежным способ подтверждения даты - использовать datetime extension ,

function validateDate($date, $format = 'Y d m') { 
    return \DateTime::createFromFormat($format, $date) !== false; 
} 

Таким образом, вам не придется прибегать к помощи регулярных выражений, и вы будете в состоянии фактически проверить даты правильно (например, что-то вроде 2014 12 51 не будет проверять).

if (! validateDate('2014 12 51')) { 
    echo 'Not valid!'; 
} 

Это также позволит вам проверить более сложные даты, если вам будет необходимо сделать что-то день:

if (validateDate('16th September 2014', 'dS F Y')) { 
    echo 'Valid!'; 
} 

Для $format аргумента вы должны использовать formatting options что DateTime::createFromFormat() принимает.

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