Я предполагаю, что вы хотите сделать следующее:
- Удалить все нечисловые символы из номера телефона.
- Пример: преобразование
'(111)-174-1234'
в '1111741234'
- Добавить пробелы в правильном месте к результирующему числу.
- Пример: преобразовать
'1111741234'
в '111 174 1234'
Если мои предположения о назначении этого кода верны, ваш код содержит две ошибки:
- Вы ставите шаг № 1 после шага № 2.
- Это привело к вводу
'(111)-174-1234'
с регулярным выражением (# 2), выполняющему следующую замену: .replace(/^(\d{3})(\d{3})(\d+)/, '$1 $2 $3')
- Приведенный выше фрагмент кода работает только для чистых чисел. не распознает
'(111)-174-1234'
как содержащее совпадения с /^(\d{3})(\d{3})(\d+)/
, поэтому замены не производятся. Другими словами, после запуска строки 3 вашего кода input.value
, вероятно, не изменился. - Решение этой проблемы заключается в простом переключении строк 3 и 4 в вашей программе.
- На шаге 1 вы использовали
.replace(regex)
вместо .replace(regex,'')
. - Это просто
String
технический метод: String.prototype.replace
принимает регулярное выражение и строку для его замены. Оставление второго параметра пустым аналогично установке второго параметра как undefined
. - Например,
"Hello world".replace(/l/g)
совпадает с "Hello world".replace(/l/g,undefined)
. Результат обоих этих фрагментов "Heundefinedundefinedo world"
. Вы можете получить желаемое поведение, используя "Hello world".replace(/l/g,'')
. Это вернет "Heo world"
.
Я внес свои исправления в пересмотренную версию вашего кода:
function mobileNumInput(input){
var regex = /[^0-9]/g; //for digit only
input.value=input.value.replace(regex, ''); // Step #1 (remove non-digits)
input.value=input.value.replace(/^(\d{3})(\d{3})(\d+)/, '$1 $2 $3'); //Step #2 (add spaces to valid phone number)
}
Вот немного доработанная версиявашего кода с одним тестом:
function mobileNumInput(input){
input.value=input.value
.replace(/[^0-9]/g, '')//Remove all non-digits
.replace(/^(\d{3})(\d{3})(\d+)/, '$1 $2 $3'); //Add spaces to the only-digit number
}
function test(){
var testInputElement=document.createElement("input");
testInputElement.value='(123)-[456} - 7890';//Horribly formatted phone number
mobileNumInput(testInputElement);
console.log(testInputElement.value);
}
test();
//123 456 7890