Мне нужна помощь для проверки поля с помощью регулярных выражений.Он будет работать в Postgres 9.5.
Правила:
- Строка должна содержать все семь служб: масло, щетки стеклоочистителя, воздушный фильтр, шины, аккумулятор, Тормоз, Антифриз
- Все сервисы должны иметь часы работы, и принимаются значения HH [: MM] {am | pm} -HH [: MM] {am | pm} илилитералы «рабочее время», «в нерабочее время», «недоступно» (это правило, которое я не мог найти решение)
- Это без учета регистра, и пробелы не должны иметь значения.
- Службы, разделенные конвейером, а служба и рабочее время разделены двоеточием
Я сделал регулярное выражение:
^(?=.*(Oil))(?=.*(Wiper blades))(?=.*(Air filter))(?=.*(Tires))(?=.*(Battery))(?=.*(Brake))(?=.*(Antifreeze))(?=.*(\s{0,}(1{0,1}[0-2]|[1-9])(:[0-5][0-9]){0,1}\s{0,}([ap]m)\s{0,}-\s{0,}(1{0,1}[0-2]|[1-9])(:[0-5][0-9]){0,1}\s{0,}([ap]m)|working hours|after hours|not availabl)).+
Эта частьрегулярного выражения проверяет только одну последовательность, а не все семь последовательностей.
(?=.*(\s{0,}(1{0,1}[0-2]|[1-9])(:[0-5][0-9]){0,1}\s{0,}([ap]m)\s{0,}-\s{0,}(1{0,1}[0-2]|[1-9])(:[0-5][0-9]){0,1}\s{0,}([ap]m)|working hours|after hours|not availabl))
Пример хорошей строки
Oil:8AM-10PM|Wiper blades:8 AM -10 PM|Air filter:8AM-10pm|Tires:8AM-10PM|Battery:8AM-10PM|Brake:8AM-9PM|Antifreeze:not available
Пример плохой строки
Oil:8AM-10PM|Wiper blades:8AM-10PM|Air filter:8AM-10PM|Tires:8AM-10PM|Battery:8AM-10PM|Brake:8AM-9PM|Antifreeze:fsdfdsfs
Oil:8AM-10PM|Wiper blades:8AM-10PM|Air filter:8AM|Tires:8AM-10PM|Battery:8AM-10PM|Brake:8AM-9PM|Antifreeze:
Oil:8AM-10PM|Wiper blades:8AM-10PM|Air filter:8AM-10PM|Tires:8AM-10PM|Battery:|Brake:|Antifreeze:8AM-9PM
Oil:8AM-10PM|Wiper blades:8AM-10PM
Кто-нибудь имеет представление о том, что не хватает для проверки семи случаев?