Попытка построить регулярное выражение для проверки шаблона - 2

Мне интересно, можно ли добавить больше проверок: [Предыдущий ответ на вопрос]( Пытаюсь построить регулярное выражение для проверки шаблона)

Вышеупомянутая проблема блестяще решена с помощью этого regex Брайаном Роджерсом:

/^([1-9]|[12][0-9]|3[01])(-([1-9]|[12][0-9]|3[01]))?(,([1-9]|[12][0-9]|3[01])(-([1-9]|[12][0-9]|3[01]))?)*$/  

[Для справки, размещаю старую проблему снова]

  1. Начинается и заканчивается числом
  2. Дефис должен начинаться и заканчиваться числом
  3. Запятая должна начинаться и заканчиваться числом
  4. Диапазон чисел должен быть от 1-31
  5. Если число начинается с дефиса (-), оно не может заканчиваться никаким другим символом, кроме запятой, и должно соответствовать всем правилам, перечисленным выше.

Например, 2-2,1 ИЛИ 2,2-1 является правильным, а 1-1-1-1 - нет.

Например:
- 1-5,5,15-29
- 1,28,1-31,15
- 15,25,3 - 1-24,5-6,2-9

Может ли это пойти дальше и добавить другие валидации?

1) Числа должны быть в порядке возрастания
Например:
- 1,2-3 - Действительны
- 4-6,23 - действительны
- 23,4-5 - недопустимо

2) Числа не должны повторяться
Например:
a) 2,2,2 - Недействительно
b) 2,3-6,3 - недействительно
c) 2,5,7-20 - допустимо

3) Если возможно
Число не должно повторяться, если ранее было определено в диапазоне
Например:
a) 2,3-6, 4 - Недействительно, так как 4 уже является числом между 3 и 6
b) 12-16, 14-18 - Неверно, так как 14, 15 и 16 уже определены в 12-16
c) 9-13, 15, 17-19 - Действительны

7
задан Community 23 May 2017 в 12:22
поделиться