Изменить первую цифру если она 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

→ Ссылка