Функция нормализации номера телефона для мобильного телефона Chrome

Я использую следующую функцию ниже, чтобы нормализовать redux-form поле ввода номера телефона.

Форматирование хорошо работает на настольном компьютере, но в мобильном Chrome оно ведет себя неожиданно. т.е. если я вхожу 1234567890 на рабочем столе поле показывает: 123-456-7890на Chrome mobile если я войду 1234567890 поле показывает: 123-567-9084

Кажется, когда я ввожу номер в Chrome Mobile, индикатор не помещается в конец поля, что приводит к вводу новых цифр перед уже введенными цифрами.

   export function normalizePhone(value, previousValue) {
      if (!value) {
        return value
      }
      const onlyNums = value.replace(/[^\d]/g, '')
      if (!previousValue || value.length > previousValue.length) {
        // typing forward
        if (onlyNums.length === 3) {
          return onlyNums + '-'
        }
        if (onlyNums.length === 6) {
          return onlyNums.slice(0, 3) + '-' + onlyNums.slice(3) + '-'
        }
      }
      if (onlyNums.length <= 3) {
        return onlyNums
      }
      if (onlyNums.length <= 6) {
        return onlyNums.slice(0, 3) + '-' + onlyNums.slice(3)
      }
      return onlyNums.slice(0, 3) + '-' + onlyNums.slice(3, 6) + '-' + onlyNums.slice(6, 10)
    }

0 ответов

Другие вопросы по тегам