【问题标题】:Grab a phone number inside a string with javascript使用 javascript 在字符串中获取电话号码
【发布时间】:2017-11-03 18:55:18
【问题描述】:

我一直在谷歌搜索并浏览了所有的 stackoverflow,但没有一个正则表达式有效。

我只是想从这样的字符串中获取电话号码:

Phone:  123-456-7890

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam lobortis ullamcorper neque ut euismod. Curabitur convallis 1-800-123-4567 luctus posuere. Suspendisse placerat porta urna, vel bibendum odio aliquet ut. Quisque in posuere tortor. Vivamus sodales risus non dapibus posuere. Sed odio est.

我在网上找到的用于电话验证的每个正则表达式字符串都不起作用。我假设是因为验证只需要字符串中的数字,而不是文本和空格。

【问题讨论】:

  • 定义“电话号码”。 1-800-111-2222 是电话号码吗? +44 303 123 7300 怎么样? 1-555-GOT-JUNK 怎么样?还是123-456-7890x202
  • @tadman 好点!更多深思:Falsehoods Programmers Believe About Phone Numbers
  • @MichaelGeary 我不得不清理在表单上收集的大量数据,有些人认为电话号码是什么或应该如何格式化,这令人难以置信。 1(999)222/33331.999.222.3333 只是您将看到的两个奇异变体。

标签: javascript node.js regex


【解决方案1】:

这是一个正则表达式示例,可以找到与您示例中的电话号码类似的电话号码。它可能不适用于 cmets 中提到的某些示例,但它可能是您正在寻找的。这个函数直接取自this related SO post。运行下面的 sn-p 以查看行为。

var regex = new RegExp(
                "\\+?\\(?\\d*\\)? ?\\(?\\d+\\)?\\d*([\\s./-]\\d{2,})+",
                "g"
            );

var possiblePhoneNumbers = ["Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam lobortis ullamcorper neque ut euismod. Curabitur convallis 1-800-123-4567 luctus posuere. Suspendisse placerat porta urna, vel bibendum odio aliquet ut. Quisque in posuere tortor. Vivamus sodales risus non dapibus posuere. Sed odio est.", "Find another one right here 1-888-999-1010 or can it?"];

for (var i=0; i < possiblePhoneNumbers.length; i++) {
    document.write('<br />');
    document.write(possiblePhoneNumbers[i] + ' => ');
    document.write('<br />');
    while (match = regex.exec(possiblePhoneNumbers[i])) {
        document.write("Phone # in string: " + match[0]);
    }
    document.write('<br />');
}

【讨论】:

    【解决方案2】:

    对于正则表达式,有一些重要的事情需要考虑。

    最简单的是,是否有一个分隔符始终出现在您要搜索的字符串之前或之后,例如“Phone:”。如果是这样,您可以创建一个搜索“电话:”的正则表达式语句,然后获取之后的所有内容,直到下一个分隔符。

    如果您无法预测字符串之前或之后会出现什么,那么您必须编写正则表达式来搜索类似于电话号码的内容。

    如果是这样,电话号码的格式是否总是相同的?

    如果是,那么很简单,搜索 1[-][0-9]{3}[-][0-9]{3}[-][0-9]{4}

    上面说,查找以 1 开头的字符串,后跟一个破折号(-),后跟 3 个连续数字 0-9,后跟一个破折号,再跟 3 个数字,然后是破折号,再跟 4 个数字.

    问题是,这个具体有限制,如果电话号码不是以 1 开头的怎么办?关键是你必须找出永远是这样的情况。

    在我们的示例中,电话号码始终包含 3 位连字符 3 位连字符 4 位数字,但有时它的前面可能有国家/地区扩展名,例如 1。

    因此,也许您想查找 333-333-4444 格式,并告诉它在此之前采用任何格式,直到找到空格等。

    【讨论】:

    • 如果你知道你想匹配什么字符串模式,我相信我们可以帮助你编写正则表达式来做到这一点
    【解决方案3】:

    一个通用的解决方案:

        alert("Phone: 123-456-7890".match(/\d+-\d+-\d+/))

    【讨论】:

      猜你喜欢
      • 2013-10-01
      • 1970-01-01
      • 2015-12-14
      • 2021-01-10
      • 2013-07-13
      • 2018-09-25
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多