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