Функция нормализации номера телефона для мобильного телефона 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)
}