повторяющееся регулярное выражение дд / мм / гггг с разделителем - PullRequest
0 голосов
/ 08 мая 2018

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

Я нашел это регулярное выражение для правильной простой даты:

Date regex 

^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$

Этот формат допускает множество форматов:

дд / мм / год

дд-мм-гггг

дд.мм.гггг

В первом случае (диапазон дат) я использую '-' в качестве разделителя и хочу проверить выбранный диапазон с помощью регулярного выражения:

01/02/2018 - 02/03/2018

Я работал, и я могу сделать это с более простым регулярным выражением:

^((\d{2})(?:\ \-\ |)){2}$

on this string

02 - 03

Когда я заменяю первую часть (\ d {2}) своим регулярным выражением даты и проверяю показанный диапазон дат (01/02/2018 - 02/03/2018), регулярное выражение не совпадает.

Во втором случае (выбрано несколько дат) я использую ',' в качестве разделителя и ищу жадное решение для квантификатора.

У вас есть идеи?

Спасибо

1 Ответ

0 голосов
/ 08 мая 2018

Вот ваше регулярное выражение для выбора диапазона через запятую или минус

([0-2][0-9]|[3][0-1])(\/|-|\.)([0][0-9]|[1][0-2])(\/|-|\.)(\d{4})\s(-|,)\s([0-2][0-9]|[3][0-1])(\/|-|\.)([0][0-9]|[1][0-2])(\/|-|\.)(\d{4})

Это работает во многих случаях следующим образом

ВХОД

# dd/mm/yyyy - dd/mm/yyyy   01/02/2018 - 02/03/2018   01/02/2018 , 02/03/2018

# dd-mm-yyyy - dd-mm-yyyy   01-02-2018 - 02-03-2018   01-02-2018 , 02-03-2018

# dd.mm.yyyy - dd.mm.yyyy   01.02.2018 - 02.03.2018   01.02.2018 , 02.03.2018

OUTPUT

# 01/02/2018 - 02/03/2018   01/02/2018 , 02/03/2018

# 01-02-2018 - 02-03-2018   01-02-2018 , 02-03-2018

# 01.02.2018 - 02.03.2018   01.02.2018 , 02.03.2018
...