preg_match: проверить формат дня рождения (дд / мм / гггг) - PullRequest
10 голосов
/ 15 сентября 2010

Как мне сделать выражение, которое проверяет ввод в день рождения, чтобы соответствовать формату, подобному этому дд / мм / гггг? Ниже то, что я до сих пор вышел, но это тоже нужно, если я поставлю 99/99/9999!

if (!preg_match("/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/", $cnt_birthday))
  {
   $error = true;
   echo '<error elementid="cnt_birthday" message="BIRTHDAY - Only this birthday format - dd/mm/yyyy - is accepted."/>';
  }

Как я могу убедиться, что он только от 01 до 31 для дд и от 01 до 12 для мм? но я уверен, как ограничить гггг ... я думаю, что теоретический 9999 должен быть приемлемым ... дайте мне знать, если у вас есть идея получше!

спасибо, Лау

Ответы [ 11 ]

0 голосов
/ 15 сентября 2010

Принятие только строго отформатированной строки, вероятно, плохая практика. Предполагая, что вы получаете информацию с веб-страницы, было бы лучше иметь отдельные поля для месяца, дня и года. Они могут быть просто текстовыми полями, но может быть предпочтительнее иметь выпадающие меню, которые решат вашу проблему с лимитами (то есть, единственный выбор на месяц - 1,2, ..., 12) Требование, чтобы пользователи вводили 01.01.2001 и не принимало 01.01.2001, является ленивым программированием. И только принимать "/" в качестве разделителя неудобно.

Но, чтобы коснуться исходного вопроса, даже если вы решите придерживаться форматированных строк - поскольку это поле даты рождения, вам, вероятно, следует ограничить yyyy:

if($yyyy > date('Y')) {
  echo '<error elementid="cnt_birthday" message="BIRTHDAY - Year must be less than or equal to the current year."/>';
}

В противном случае люди могут иметь отрицательный возраст:)

...