проблема с регулярным выражением месяца в php. проблема с проверкой

#php

#php

Вопрос:

 function preveriDatum($string)
{   
    if (preg_match("^(3)?(?(1)[0-1]|(0)?(?(2)[1-9]|[12][0-9])).(0)?(?(3)[1-9]|1[0-2]).[1-9][0-9]{3}$^", $string)) 
        return true;
    else 
        return false;
}
  

действительно для 13.01.2010, но не для 13.1.2010. Могу ли я aso сделать его действительным для 13.1.2010?

Ответ №1:

Боже мой, что ты пытаешься здесь сделать? Можете ли вы просто поместить это в класс DateTime и проверить это таким образом? http://php.net/manual/en/book.datetime.php

В любом случае для регулярного выражения вы хотите * вместо a ? для 0. ? требуется наличие хотя бы одного экземпляра. Вместо (0)? используйте (0) *.

Ответ №2:

Вы могли бы использовать:

 if (preg_match("^(0?[1-9]|[12][0-9]|3[01]).(0?[1-9]|1[012]).([1-9][0-9]{3})$", $string)) 
  

Лучше, конечно, использовать класс DateTime (http://php.net/manual/en/book.datetime.php ).

Ответ №3:

Измените .(0)?(?(3)[1-9]|1[0-2]) на .(0)?(?(3)[1-9]|1[0-2]|[1-9]) . Также рассмотрите возможность использования библиотеки дат.