#javascript #reactjs #regex
#javascript #reactjs #регулярное выражение
Вопрос:
Я хочу удалить символы в телефонных номерах. Иногда это в формате 151-454-6545, но иногда это в (545)-(564)-(5465) а иногда это происходит в 548.445.8454. Я использую
val.replace(/(d{3})(d{3})(d{4})/, '($1) -$2-$3')
для замены.. но это не удаляет точку.Что делать, чтобы также удалить точку? ожидаемый результат, например, 545-455-4545
Комментарии:
1. сначала удалите все символы, затем отформатируйте в соответствии с желаемой структурой
2. ваше регулярное выражение ищет 1234567890 … т.Е. 10 цифр, между которыми ничего нет, поэтому не совпадает, поэтому не заменяет — ваш ввод составляет 11 цифр… так что это еще одна проблема
3.
val.replace(/D /g, '').replace(/(d{3})(d{3})(d{4})/, '($1) -$2-$3')
?4. также
expected output like 545-455-4545
… тем не менее, вы пытаетесь заменить значение($1) -$2-$3
… итак, вы хотите()
или нет?5. это? regex101.com/r/Wavw45/1
Ответ №1:
Я предлагаю использовать нецифровое выражение, чтобы заменить их на строку ‘-‘ :
val.replace(/^D /, '')
.replace(/D $/, '')
.replace(/D /g, '-')
Дайте мне знать, если это делает то, что вам нужно.
РЕДАКТИРОВАТЬ: обрезать пробелы
Комментарии:
1. но OP хочет
545-455-4545
вывод… или(123) -456-7890
— действительно неясно, что OP хочет быть честным, но:p с вводом(545)-(564)-(5465)
вашего регулярного выражения выводит-454-564-5465-
2. Да, это не очень понятно, но я обновил, чтобы хотя бы обрезать пробелы
Ответ №2:
вот версия, содержащая только 1 регулярное выражение
https://regex101.com/r/Wavw45/1
регулярное выражение
[^dn]*(d{3})[^dn] (d{3,4})[^dn] (d{4})[^dn]*
замените (или любой другой шаблон, который вы хотите)
($1) -$2-$3
Ответ №3:
Используйте
.replace(/^D*(d{3})D*(d{3})D*(d{4})D*$/, '$1-$2-$3')
Смотрите доказательство.
Объяснение
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
D* non-digits (all but 0-9) (0 or more times
(matching the most amount possible))
--------------------------------------------------------------------------------
( group and capture to 1:
--------------------------------------------------------------------------------
d{3} digits (0-9) (3 times)
--------------------------------------------------------------------------------
) end of 1
--------------------------------------------------------------------------------
D* non-digits (all but 0-9) (0 or more times
(matching the most amount possible))
--------------------------------------------------------------------------------
( group and capture to 2:
--------------------------------------------------------------------------------
d{3} digits (0-9) (3 times)
--------------------------------------------------------------------------------
) end of 2
--------------------------------------------------------------------------------
D* non-digits (all but 0-9) (0 or more times
(matching the most amount possible))
--------------------------------------------------------------------------------
( group and capture to 3:
--------------------------------------------------------------------------------
d{4} digits (0-9) (4 times)
--------------------------------------------------------------------------------
) end of 3
--------------------------------------------------------------------------------
D* non-digits (all but 0-9) (0 or more times
(matching the most amount possible))
--------------------------------------------------------------------------------
$ before an optional n, and the end of the
string