javascript - 如何以简洁的方式在 JavaScript 中使用 replace 删除空格、破折号和句点?

标签 javascript regex replace

有没有办法以更有效(更清洁)的方式执行以下操作?

function phoneFormat(number){
      var noSpace = number.split(" ").join("");
      var noSpace = noSpace.replace(/-/g, "");
      return noSpace.replace(/./g, "");
    }

更改此数字后,我想将其重新格式化为 (ddd) ddd-dddd。我正在考虑使用 split 和 push 来做到这一点,但有没有更聪明的方法?

最佳答案

在正则表达式中使用字符类:

return number.replace(/[- .]/g, "");

也就是说“将字符串中的所有 -、空格和 . 字符替换为空白字符串。” [] 表示类,意思是“这些字符中的任何一个”。请注意,我将 - 放在了它的开头;如果它不在开头或结尾,则必须用反斜杠将其转义,否则它会在类中引入一个 range 字符(例如,A-Z 是所有上部大小写英文字母)。但是当它是第一件事(就在 [ 之后)或最后一件事(就在 ] 之前)时,它并不特别。另请注意,虽然 . 在正则表达式中通常是特殊的(意思是“这里的任何字符”),但它在字符类中并不特殊。


回复你的评论:

do you know if there's a smart way to reformatting it to (ddd) ddd-ddd?

你在你的问题中说了 (ddd) ddd-dddd,所以我假设最后有四个而不是三个(例如,你在美国、加拿大或许多美洲其他地区):

如果,比方说,x"1234567890",那么 x.replace(/^(\d{3})(\d{3} )(\d{4})$/, '($1) $2-$3') 将返回 "(123) 456-7890"(...)捕获组,替换字符串中的 $1 等是放置捕获文本的位置。

所以:

return number.replace(/[- .]/g, "").replace(/^(\d{3})(\d{3})(\d{4})$/, '($1) $2-$3');

\d 表示“数字”(0-9),{3} 表示“恰好是前面的三”,所以 \d{3} 表示“三位数字”(当然,\d{4} 表示“恰好四位数字”)。 ^$ “声明”输入的开始和结束。


不过,我应该指出,验证和重新格式化电话号码往往会出现问题。例如,通过执行上述操作,您将让某人无法使用国际电话号码或带分机号的电话号码(例如 (408) 555-1212 分机号 1234)等。

关于javascript - 如何以简洁的方式在 JavaScript 中使用 replace 删除空格、破折号和句点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35968097/

相关文章:

javascript - 从特定元素之间包含的字符串中剪切出一段文本(jquery/javascript)

javascript - 响应式滚动的问题

javascript - 移动 Chrome 上的 IFrame 播放器 API

java - 查找并计算大写字母

java - 许多短片或一大段文本的正则表达式更快吗?

如果模式以 ; 结尾,则 Java 正则表达式匹配字符串或无

javascript - 删除评论 anchor # 和所有内容?搜索但离开?和其余的

javascript - 无论速度和兼容性如何,为什么不只使用类,而不要在HTML/CSS中使用ID?

javascript - 单击将文本值添加到输入的链接

java - 正则表达式匹配 2 个字符之间的文本