Изменить первую цифру если она 8
В JS только начинаю разбираться. Нашёл в интернете пример кода на чистом JS для ввода номера телефона.
//Маска ввода
window.addEventListener("DOMContentLoaded", function() {
function setCursorPosition(pos, elem) {
elem.focus();
if (elem.setSelectionRange) elem.setSelectionRange(pos, pos);
else if (elem.createTextRange) {
var range = elem.createTextRange();
range.collapse(true);
range.moveEnd("character", pos);
range.moveStart("character", pos);
range.select()
}
}
function mask(event) {
var matrix = "+_ (___) ___-__-__",
i = 0,
def = matrix.replace(/\D/g, ""),
val = this.value.replace(/\D/g, "");
if (def.length >= val.length) val = def;
this.value = matrix.replace(/./g, function(a) {
return /[_\d]/.test(a) && i < val.length ? val.charAt(i++) : i >= val.length ? "" : a
});
if (event.type == "blur") {
if (this.value.length == 2) this.value = ""
} else setCursorPosition(this.value.length, this)
};
var input = document.querySelector(".maskphone");
input.addEventListener("input", mask, false);
input.addEventListener("focus", mask, false);
input.addEventListener("blur", mask, false);
});
Если пользователь копирует номер телефона в поле ввода, и если он начинается не с +7 а с 8, тогда надо 8 менять на 7. Код этот для меня сложен и не понятен. Помогите внедрить нужную функцию.
Ответы (2 шт):
Автор решения: OPTIMUS PRIME
→ Ссылка
val = this.value.replace(/\D/g, ""); — Оно удаляет из введенной строки всё, кроме цифр, для предстоящей замены. Добавил еще один .replace(/^8/, "7") где ^ означает 'Начало строки' (это «Регулярные выражения»). Если нужно любую первую цифру заменить на 7, .replace(/^\d/, "7") [ d - digit, цифра ].
document.addEventListener("DOMContentLoaded", function() {
var input = document.querySelector(".maskphone");
input.addEventListener("input", mask);
input.addEventListener("focus", mask);
input.addEventListener("blur", mask);
/***/
function mask(event) {
var blank = "+_ (___) ___-__-__";
var i = 0;
var val = this.value.replace(/\D/g, "").replace(/^8/, "7"); // <---
this.value = blank.replace(/./g, function(char) {
if (/[_\d]/.test(char) && i < val.length) return val.charAt(i++);
return i >= val.length ? "" : char;
});
if (event.type == "blur") {
if (this.value.length == 2) this.value = "";
} else {
setCursorPosition(this, this.value.length);
}
};
/***/
function setCursorPosition(elem, pos) {
elem.focus();
if (elem.setSelectionRange) {
elem.setSelectionRange(pos, pos);
return;
}
if (elem.createTextRange) {
var range = elem.createTextRange();
range.collapse(true);
range.moveEnd("character", pos);
range.moveStart("character", pos);
range.select();
return;
}
}
});
<input class="maskphone">
Автор решения: Владимир Дигл
→ Ссылка
Еще можно в код дописать:
var val = this.value.replace(/\D/g, "").replace(/^8/, "7").replace(/^9/, "79"); // <---
При вводе цифры 9, подставляется 79