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

Javascript 使用正则表达式从字符串中检索电话号码,javascript,regex,parsing,Javascript,Regex,Parsing,可能重复: 我对正则表达式有点陌生,所以我还不知道它的可能性。因此,我不知道解决这个问题是否困难 我有非常自由的电话字符串格式,需要以一种固定的方式格式化它们(至少尽我最大的努力)。 "899-123-4-45; 22-56-87", "5 99-25-31-71", “577-345-678274-89-56” 以下是我知道的信息: 新的固定电话以2-XX-XX-XX开头,后跟6个数字(它们之间可以是两种类型的分隔符“-”或“”,其中的数字未知) 旧的固定电话只包含6个号码XX-XX-XX

可能重复:

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

我有非常自由的电话字符串格式,需要以一种固定的方式格式化它们(至少尽我最大的努力)。 "899-123-4-45; 22-56-87", "5 99-25-31-71", “577-345-678274-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;2456 324,455-566 22 40 56”?先把这些分成三部分?我可以用“;”或“或”、”分开吗?那么,我是否应该只检索数字并确定它们的样式并正确设置格式?

在我看来,最好的解决方案是使用多个正则表达式,每个正则表达式的格式不同。正则表达式往往增长得相当快,因此维护它们可能是一种令人畏惧的经历

我要做的是使用以下内容:

  • (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
  • (5\d{2})[-]+(\d{2})[-]+(\d{2})[-]+(\d{2})
    匹配第四种模式(新手机):
    5XX-YY-YY
您必须使用上述表达式来查看哪个表达式与您输入的数字格式相匹配。请注意,这些表达式假定构成电话号码的号码之间用空格(
)或破折号(
-
)分隔

如果模式匹配,正则表达式引擎还将把组成电话号码的号码放入组中,由
括号表示。然后,您可以通过访问这些组并创建表示新格式化电话的新字符串,以任何方式重建电话号码


要了解如何在Javascipt中使用正则表达式组,请看一看。

我建议使用不同的方法:

首先,在分隔电话号码的字符上拆分字符串:

result = subject.split(/[,;]/);
其次,在每个子字符串上,删除所有非数字字符(可能除了
+
之外,以便保留有关国际号码的信息):


现在,所有数字都没有任何分隔符。然后,您可以查看字符串,将它们分为不同的类别(移动、固定电话、国际等),并可能重新介绍您自己的分隔符。如果你想要的话。

574-12-34-56这样的字符串;2 456 324,455-566 2 22 40 56可能可以处理..但是如果你有一个像
574-12-34-56这样的字符串;2 456 324,455-566 2 22 40 56 2 22 40 56 2 56 2 22 40 56
我认为不会。我不认为电话号码的正则表达式与这个问题密切相关,它确实帮助我熟悉正则表达式。我想我现在知道如何处理这个问题了。谢谢!;)@SandroDolidze:很高兴它有帮助。这种方法似乎也很有趣。我两个都试试,看哪一个更好用。感谢您采用不同的方法;)
result[i] = result[i].replace(/[^\d+]+/g, "");