Как проверить формат данных в PHP

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

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

Используйте регулярное выражение, как предложили другие. Однако те, что были отправлены, будут принимать недействительные даты, такие как 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 } 

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

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

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

 if(preg_match("/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/")) { do something } 

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

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

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

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

Если я правильно вас понимаю, вы хотите проверить строку, чтобы убедиться, что она соответствует шаблону 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