javascript - 使用正则表达式从字符串中检索电话号码

标签 javascript regex parsing

Possible Duplicate:
Regular Expression for Phone Number

我对正则表达式有点陌生,所以我还不知道它的可能性。所以,不知道这个问题解决起来会不会很困难。

我的电话字符串格式非常自由,需要以固定的方式格式化它们(至少尽力而为)。 “899-123-4-45;22-56-87”, “5 99-25-31-71”, “577-345-678,274-89-56”。

这是我所知道的信息:

新的固定电话以 2-XX-XX-XX 开头,后跟 6 个数字(它们之间可以是两种类型的分隔符,“-”或“”,其中数量未知)。

旧的固定电话仅包含 6 个号码 XX-XX-XX。

旧手机代码包含 8XX-YY-YY-YY 9 个数字。第一个是8。XX是运营商代码(不知道全部)。

新的手机代码包含5XX-YY-YY 9个数字,唯一的区别是第一个数字。

某些记录包含旧固定电话代码、新固定电话代码、旧手机代码和新手机代码。

我需要以新格式存储所有数字,只有两个分隔符“-”和“,”。 例如:“599-12-34-56,2-45-61-34”,“2-45-65-12”,“574-12-34-56”。

我只是不知道从哪里开始。我是否应该尝试仅将大字符串与包含数字的字符串分开,然后仅检索数字并确定它是什么格式?或者有更简单的解决方案吗?

你会如何解析这个字符串:“574-12-34-56; 2 456 324, 455-566 2 22 40 56”?首先将它们分成3部分?我可以用“;”来分割它吗?或“”或“,”?那么我应该只检索数字并确定它们的样式并正确设置格式吗?

最佳答案

(在我看来)最好的解决方案是使用多个正则表达式,每个正则表达式用于不同的格式。正则表达式往往会变得非常大且快速,因此维护它们可能是一项令人畏惧的经历。

我会做的是使用这样的东西:

  • (2)[ -]+(\d{2})[ -]+(\d{2})[ -]+(\d{2}) 匹配第一个模式(新固定电话):2-XX-XX-XX
  • (\d{2})[ -]+(\d{2})[ -]+(\d{2}) 匹配第二个模式(旧固定电话) : 6 位数字。
  • (8\d{2})[ -]+(\d{2})[ -]+(\d{2})[ -]+(\d{2}) 匹配第三种模式(旧手机):8XX-YY-YY-YY
  • (5\d{2})[ -]+(\d{2})[ -]+(\d{2})[ -]+(\d{2}) 匹配第四种模式(新手机):5XX-YY-YY-YY

您必须使用上述表达式来查看哪个表达式与您输入的数字的格式匹配。请注意,这些表达式假定组成电话号码的数字由空格 () 或破折号 (-) 分隔。

如果模式匹配,正则表达式引擎还会将组成电话号码的数字分组,用 () 括号表示。然后,您可以通过访问这些组以任何您希望的方式重建电话号码,并创建代表新格式化的电话的新字符串。

要了解如何在 Javascipt 中使用正则表达式组,请查看 here .

关于javascript - 使用正则表达式从字符串中检索电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12968562/

相关文章:

javascript正则表达式用data-src替换所有img src

javascript - 使用 jquery .parseJSON 或 JSON.parse : how to remove quotes from function calls for formatters? 解析 JSON 以与 Highcharts 一起使用

c++ - 解析 sstream

javascript - Discord.js GuildMember.hasPermission?

javascript - 用图像 mask SVG

javascript - 带有幻灯片动画的 jQuery-UI 可调整大小错误

javascript - 在Javascript中用空格和双引号分割字符串

java - 可能的正则表达式回溯问题?

javascript - Angular/TS promise 会导致乱序执行吗?

适合 JavaME 语法的编译器推荐?