日期正则表达式不返回True

时间:2014-09-16 01:15:27

标签: php regex

出于某种原因,在表格中输入“2014 12 12”时,这总是返回false。这种格式是进入数据库的。

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

2 个答案:

答案 0 :(得分:1)

试试这个正则表达式:

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

答案 1 :(得分: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参数,您必须使用DateTime::createFromFormat()接受的formatting options