Регулярное выражение. Как оставить + при валидации?
Подскажите, как провести валидацию номера телефона при наборе в 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 шт):
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">
Скорее всего так:
$(this).val().replace(/^\D*(\+)|\D/g, '$1')
PS: Код из вопроса не делает того, что о нём написано.