Регулярное выражение. Как оставить + при валидации?

Подскажите, как провести валидацию номера телефона при наборе в input, что была возможность оставлять знак плюса ? Приведу пример:

$(".js-input-telephone").on('keyup', function() {
  $(this).val($(this).val().replace(/\D/, '').substr(0, 13));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="RegisterForm_contact" class="bl_form__input js-input-telephone" type="tel" placeholder="Ваш E-mail" name="RegisterForm[contact]" value="+380">

При вводе не цифр оно их удаляет вместе с +. Мне необходимо, чтобы "+" сохранялся.


Ответы (2 шт):

Автор решения: PotroNik

UPD2: Из за чего возникает проблема в вопросе автора:
В функции замены указан шаблон \D означающий любой символ отличный от цифр, символ + не относится к диапазону цифр и заменяется при вводе символа при переходе в функцию. Просто исключить замену символа + заменив \D на [^\d+], тогда символ + можно будет записывать в строке в любом месте


Или как один из вариантов, это изменить регулярное выражение.

(?:(^\+\d*)[^\d]|^[^\d+])
//изменен на
^(?:(\+?\d*)?[^\d]*)
//так как в случае если строка начинается не с плюс, можно ввести любой символ.

Захватывает в начале строки символ + и ноль и более цифр в группу, и заменяем любой символ отличный от цифры на пустоту, возвращая только значение захваченной группы $1 UPD: поправил проблему в случае если стереть строку, то можно было писать все что угодно


Пример:

$(".js-input-telephone").on('keyup', function() {
  $(this).val($(this).val().replace(/^(?:(\+?\d*)?[^\d]*)/g, '$1').substr(0, 13));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="RegisterForm_contact" class="bl_form__input js-input-telephone" type="tel" placeholder="Номер телефона" name="RegisterForm[contact]" value="+380">

→ Ссылка
Автор решения: Qwertiy

Скорее всего так:

$(this).val().replace(/^\D*(\+)|\D/g, '$1')

PS: Код из вопроса не делает того, что о нём написано.

→ Ссылка