What is the MM/DD/YYYY regular expression and how do I use it in php?

后端 未结 9 970
清歌不尽
清歌不尽 2020-12-03 05:11

I found the regular expression for MM/DD/YYYY at http://www.regular-expressions.info/regexbuddy/datemmddyyyy.html but I don\'t think I am using it correctly.

Here\'s

9条回答
  •  渐次进展
    2020-12-03 05:19

    The problem is one of delimeters and escaped characters (as others have mentioned). This will work:

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

    Note that I added a forward-slash to the beginning and ending of the expression and escapped (with a back-slash) the forward-slashes in the pattern.

    To take it one step further, this pattern won't properly extract the year... just the century. You'd need to change it to /(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.]((?:19|20)\d\d)/ and (as Jan pointed out below) if you want to make sure the whole string matches (instead of some subset) you'll want to go with something more like /^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.]((?:19|20)\d\d)$/.


    As others have mentioned, strtotime() might be a better option if you're just trying to get the date out. It can parse almost any commonly used format and it will give you a unix timestamp. You can use it like this:

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

提交回复
热议问题