регулярное выражение - проверить форматы даты

0

Я бы хотел помочь. У меня есть поле ввода, где я бы хотел проверить, записал ли пользователь дату его рождения в следующих форматах: dd/mm/yyyy или dd-mm-yyyy

if(preg_match('/^[0-9]{2}-[0-9]{2}-[0-9]{4}$/', $_POST['dob'])){
    // ok
} else {
    // there an error
}

Как я могу изменить свое регулярное выражение, чтобы соответствовать '/' или '-' между цифрами?

Теги:
date

1 ответ

0
Лучший ответ

Поместите шаблоны, которые соответствуют форматам дат внутри группы, не связанной с захватом, ограниченной оператором чередования.

if(preg_match('~^[0-9]{2}(?:-[0-9]{2}-[0-9]{4}|/[0-9]{2}/[0-9]{4})$~', $_POST['dob'])){
    // ok
} else {
    // there an error
}

ИЛИ

Используйте группу захвата, а затем передайте символы захвата с помощью обратных ссылок.

if(preg_match('~^[0-9]{2}([-/])[0-9]{2}\1[0-9]{4}$~', $_POST['dob'])){
    // ok
} else {
    // there an error
}

ДЕМО 1

ДЕМО 2

  • 0
    Спасибо за ответ! Еще один вопрос, если это возможно. Как я могу также разделить дату, или / или - в массив? Я использую $ dob = preg_split ('// | - /', $ dob)
  • 1
    preg_split('~[/-]~', $dob)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню