确定JS中的字符串是否包含电话号码

时间:2016-09-09 18:57:27

标签: javascript regex validation phone-number

我目前正在构建一个聊天框,并希望对用户发送的内容进行快速的客户端验证。我希望能够检测用户是否在他们的消息中发送了一个电话号码(尽可能多的格式,但一般的美国格式可以),并用井号(#)替换它。我已经为这样的电子邮件实现了这个:

var message = 'Hi. This is my email: foo@bar.com. This is my number: (970)-555-7595.';
var emailExp = /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/img;

// prints: Hi. This is my email: *********. This is my number: (970)-555-7595
console.log(message.replace(emailExp, '*********'));

我希望它看起来像这样:

var message = 'Hi. This is my email: foo@bar.com. This is my number: (970)-555-7595.';
var emailExp = /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/img;
var phoneExp = SOME_CRAZY_PHONE_REGEX;

// prints: Hi. This is my email: *********. This is my number: ##########
console.log(message.replace(emailExp, '*********').replace(phoneExp, ##########));

我能以任何方式完成这项任务吗?我需要它来查找字符串中每个电话号码的所有实例,并用井号替换它们。表达不必过于疯狂,但我希望它能与大多数美国一般格式相匹配。

我确实做了一些寻找模式,但大多数都验证了一个完整的字符串 一个电话号码。我试图找到并替换字符串中的所有电话号码。感谢

修改

我不打算改进我的电子邮件模式。只是在这种情况下可以使用的电话号码模式:)

2 个答案:

答案 0 :(得分:3)

解决方案最终成为:

var phoneExp = /(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?/img;

根据fatcat的决议fatcat1111's solution here。我只需要删除开始的^字符和结束的$字符。

答案 1 :(得分:1)

var phoneExp = /(\(\d{3}\))?[\s-]?\d{3}[\s-]?\d{4}/img;

这个正则表达式适用于带或不带区号的美国电话号码,无论是否有 - 在他们应该去的地方。