Регулярное выражение даты не возвращается

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

$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}$
1

Другие решения

Более надежный способ подтвердить дату — использовать datetime расширение.

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 Аргумент вы должны использовать параметры форматирования тот DateTime::createFromFormat() принимает.

0

По вопросам рекламы [email protected]