Может ли кто-нибудь показать мне ошибку моих путей, когда дело доходит до этого регулярного выражения:
if(preg_match("/^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$/", $_POST["date"]) === 0) { echo 'error'; }
В основном я хочу, чтобы это отображало сообщение об ошибке каждый раз – если формат не правильный (dd / mm / yyyy).
Что я делаю неправильно с вышеуказанным?
Большое спасибо за любые указатели.
– обновленное регулярное выражение выше вскоре после публикации – извинения за неудобства –
Я думаю, вам следует избегать косых черт /^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/
Вам нужно избежать слэш, поскольку вы используете его как разделитель регулярных выражений
/^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/
или использовать разные разделители регулярных выражений
#^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$#
Вы также можете использовать этот:
([0-2]\d|3[0-1])\/(0\d|1[0-2])\/(19|20)\d{2}
если вы хотите провести различие между датами и месяцами, а также проверить только 2 века.
Я использую это для проверки дат
private function validate_date( $date, $empty_allowed = true ) { if ( empty( $date ) ) { return $empty_allowed; } if ( ! strpos( $date, '/' ) ) { return false; } if ( substr_count( $date, '/' ) !== 2 ) { return false; } if ( preg_match( '/(0[1-9]|1[0-9]|3[01])\/(0[1-9]|1[012])\/(2[0-9][0-9][0-9]|1[6-9][0-9][0-9])/', $date ) !== 1 ) { return false; } $split = explode( '/', $date ); return checkdate( $split[1], $split[0], $split[2] ); }