Регулярное выражение для соответствия от 0 до 9 и выбранным символам - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь построить регулярное выражение для соответствия от 0 до 9 (до 10 цифр) и /-. (от 0 до 2 макс.). Не должно быть все . или все ///. Может быть /.- или .-. или любой из трех комбинаций, но не более 2 из этих символов.

Я пытаюсь проверить, имеет ли дата заданные форматы. Пользователь может ввести 1 или 10.02 et c. Я разделю это значение и буду использовать его позже.

Как мне сделать регулярное выражение для этого? Это делается в Javascript.

Я пытался var pattern =/^([0-9([\/.-]{0,2})]{1,10})$/g;, пока не сдался.

Редактировать: 1 ->true 10.10 - true 10.12/2020 - true / -> false .10.20 - false

1 Ответ

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

Вы можете использовать квантификатор {0,2} для группы без захвата, которая сама соответствует одному из [/.-], за которым следуют 1+ цифр 0-9.

Чтобы предотвратить сопоставление более 10 цифр, Вы можете использовать отрицательный прогноз, который не будет соответствовать 11 цифрам.

Если вы хотите максимум 0 - 3, квантификатор может быть {0,3}

^(?!(?:[0-9\/.-]*[0-9]){11}$)[0-9]+(?:[\/.-][0-9]+){0,2}$

Regex demo

const pattern = /^(?!(?:[0-9\/.-]*[0-9]){11}$)[0-9]+(?:[\/.-][0-9]+){0,2}$/;

[
  "1",
  "10.02",
  "1111111111",
  "111.111.1111",
  "10.12/2020",
  "/",
  ".10.20",
  "11111111111",
  "111.111.11111"
].forEach(s => console.log(s + " --> " + pattern.test(s)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...