Как я могу отклонить строку, содержащую непоследовательные символы в формате даты - PullRequest
2 голосов
/ 24 января 2020

Я пытаюсь найти регулярное выражение, которое будет отклонять непоследовательные символы в предоставленном формате даты. Я хочу быть максимально гибким, и поэтому я решил, что моя строка формата даты может содержать ГГ или ГГГГ, ММ или МММ, ДД или DDD, чч мм и сс.

Некоторые из регулярных выражений Я уже разобрался - например, соответствие следующего покажет, что месяц представляет собой 3-символьный формат:

([M])\1{2}

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

YYYY-MM-DD hh:mm:ss
hh:mm:ss YYYY-MM-DD 
DD/MMM/YYYYhh-mm

Но эти форматы должны быть отклонены

YYYY-MM-DD hh:mm:ss YYYY // year appears twice
hh:mm:ss YYYY-MM-DD hh // hour appears twice
DD/MMM/YYYYhh-mm m // m not consecutive with other m

В интересах будущего расширения я хочу разрешить использование непоследовательных специальных символов (/ -.:) et c и отклонение всех непоследовательных буквенных чисел c символов. Чувствительный к регистру, хотя - мм и ММ не совпадают (как указано выше)

Просто чтобы прояснить - я не пытаюсь проверить фактическую дату - я пытаюсь проверить только строку формата даты.

1 Ответ

1 голос
/ 24 января 2020

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

function(text) { 
    return !/(\w)\1*(?!\1).*\1/.test(text);
}

См. Демонстрационную версию regex . Вы можете изменить \w на [YMDhms], чтобы проверить только эти шесть букв.

Детали шаблона

  • (\w) - Группа 1 (далее ссылаются на с обратной связью \1): слово char
  • \1* - ноль или более вхождений того же символа, что и в группе 1
  • (?!\1) - установите границу, убедитесь, что следующий символ не совпадает с символом в группе 1
  • .* - любой ноль или более символов, кроме символов разрыва строки, максимально возможное число
  • \1 - один и тот же символ как в группе 1.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...