Регулярное выражение для извлечения времени из строки естественного языка - PullRequest
2 голосов
/ 12 июня 2019

В моей логике мне нужна строка var, которая будет сохранена в базе данных, эта строка на самом деле является своего рода форматом времени, настроенным для переменной toString следующим образом:

(days)d(hours)h(minutes)m

пример 2 дня 15 часов иhalf => 2d15h30m

Я хотел бы убедиться, что никто не троллит ввод текста, ожидая, что этот формат будет отправлен, и дает другой, я всегда был ужасным создателем шаблонов, и regex может кто-то помочь, пожалуйстамне быстро с этим?

Я попробовал сам:

([0-9]{1}|[0-9]{1}|[0-9]{1})d([0-1]{1}[0-9]{1}|20|21|22|23)h([0-5]{1}|[0-9]{1})m

Но это не сработало, как каждый раз, когда я пытаюсь построить один из них.

1 Ответ

0 голосов
/ 12 июня 2019

Вы можете использовать

pattern="(?=[^1-9]*[1-9])\d+d(?:[10]?[0-9]|2[0-3])h[0-5]?\dm"

См. Демонстрацию регулярных выражений и график регулярных выражений :

enter image description here

В регулярном выражении атрибута HTML5 pattern этот шаблон будет использоваться для компиляции следующего регулярного выражения: ^(?:(?=[^1-9]*[1-9])\d+d(?:[10]?[0-9]|2[0-3])h[0-5]?\dm)$.

Соответствует

  • ^(?: - начало строки и начало группы контейнеров без захвата
  • (?=[^1-9]*[1-9]) - положительный прогноз, который требует по крайней мере одну ненулевую цифру на входе
  • \d+d -1+ цифр и d символ после
  • (?:[10]?[0-9]|2[0-3])h - необязательный 1 или 0 с последующей цифрой или 2 с последующей цифрой от 0 до 3оба сопровождаются h
  • [0-5]?\dm - необязательная цифра от 0 до 5, за которой следует любая цифра и m
  • )$ - конец контейнерагруппа и конец строки привязки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...