Как проверить формат данных в PHP - PullRequest
3 голосов
/ 24 июля 2010

Я пытаюсь проверить формат даты, чтобы проверить, могу ли я проверить, что переменная данных имеет определенный формат, например MM-DD-YYYY.если нет, то выход ().Я не уверен, как проверить формат и был бы признателен, если кто-нибудь может мне помочь с этим.Спасибо ...

$date=05/25/2010;    
if(XXXXX){
    // do something....
}

Ответы [ 6 ]

4 голосов
/ 24 июля 2010

вы можете использовать регулярные выражения

if(preg_match("/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/"))
{
    do something
} 
2 голосов
/ 24 июля 2010

Используйте регулярное выражение, как предлагали другие.Те, что были опубликованы ранее, примут недействительные даты, такие как 99/99/9999.Вот улучшенное регулярное выражение (взято из здесь )

$date_regex = '!^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$!';
if (preg_match($date_regex, $date)) {
   // do something
}

Он будет принимать только действительные даты и также будет принимать различные разделители (такие как 20.05.2002 и 05-02-2002),

Если вы спросите меня, это плохой пользовательский опыт, заставляющий их вводить определенный формат.Вы можете работать с различными форматами, используя strtotime ().

2 голосов
/ 24 июля 2010

Если вы пытаетесь сделать это для ограничения ввода пользователя, вы всегда можете использовать strtotime () на входе пользователя и преобразовать его в метку времени Unix, а затем использовать date () Функция для отображения, как вы хотите.

Если вы действительно хотите определить, находится ли он в определенном формате или требует только определенного формата, то preg_match () с регулярным выражением будет полезен, я думаю, что на этой странице они примеры разбора дат. Если нет, то это будет примерно так:

if (preg_match('~[0-9]{2}-[0-9]{2}-[0-9]{4}~', $dateStr)) { echo 'Correct format'; }

Очевидный недостаток в том, что дата может пройти проверку формата, но не может быть действительной датой. На мой взгляд, примите любую дату в пользовательском вводе и используйте strtotime / date, чтобы получить ее в нужном формате.

1 голос
/ 24 июля 2010

Если я правильно вас понимаю, вы хотите проверить строку, чтобы убедиться, что она соответствует шаблону MM-DD-YYYY?

Если это так, я бы предложил две проверки: одну, чтобы убедиться, что она соответствуетобщий набор цифр и еще один, чтобы проверить, что месяцы являются первыми, а дни - вторыми.

function checkDate( $date )
{

    if (preg_match("/[0|1][0-9]/[0-9][1-9]/[0-9]{4}/",$date)
    {
        if (substr($date,0,2)<=12 && substr($date,3,2)<=31)
        {
             return true;
        }
    }
    return false

}

Обновление: Добавлена ​​дополнительная проверка дней, чтобы убедиться, что она действительна,на основании комментария NullUser

1 голос
/ 24 июля 2010
0 голосов
/ 24 июля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...