Regex для номера телефона в форме валидации

в шаблоне django с тегом html pattern и boostrap для валидации формы

с помощью этого регекса проверяется последовательность чисел, которые могут быть разделены тире

"^[+-]?\d(?:-?\d)+$"

пример:

12-65-25-75-84 or 12-255-0214

javascript :

(() => {
    'use strict'    
    const forms = document.querySelectorAll('.needs-validation')
    
    Array.from(forms).forEach(form => {
        form.addEventListener('submit', event => {
            if (!form.checkValidity()) {
                event.preventDefault()
                event.stopPropagation()
            }

            form.classList.add('was-validated')
        }, false)
    })
})()

и html

<input type="text" class="form-control" id="exampleFormControlInput1" name="tel" id="tel" placeholder="Tel" pattern="^[+-]?\d(?:-?\d)+$" required>
                            </div>

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

пример:

12 57 125-98-457

и ограничить общее количество цифр до 15 (без учета пробелов и тире)

например, строка следующего вида:

12-28-35-74-12

или

12 28 35 74 12

or 123-478 25 12 124-15

спасибо

Я бы использовал:

^[0-9](?:[ -]?[0-9]){0,14}$

Смотрите демонстрацию RegEx

  1. ^ - Сопоставляет начало строки.
  2. [0-9] - Совпадает с одной цифрой (0, 1, ... 9).
  3. (?: - Начало не захватывающей группы.
  4. [ -]? - Опционально соответствует либо пробелу, либо '-'.
  5. [0-9] - Соответствует одной цифре (0, 1, ... 9).
  6. ) - Конец не захватывающей группы.
  7. {0,14} - Зачищает предыдущий токен, т.е. предыдущую группу не захвата, от 0 до 14 раз.
  8. $ - Выравнивает конец строки.
Вернуться на верх