Skip to content

FCC 高级算法题 —— Validate US Telephone Numbers

TheaAo edited this page Apr 12, 2017 · 1 revision

我的思路和解法。

最先发布在我的个人博客

题目

输入字符串,判断其格式是否是有效的美国电话号码,返回判断结果。

Validate US Telephone

思路

关键点

1.利用举的例子自行总结出有效格式是什么;

2.能够通过正则表达式表现有效格式。

具体分析

根据给出的例子,电话号码可以分为以下几个部分:

  • 国家代码——可有可无,有则必须为 1 。

  • 区号——三位数,与国家代码之间间隔可有可无,有则间隔符只能为空格或连字符;外层包裹括号可有可无,有则必须成对。

  • 电话号码——七位数,与区号之间间隔可有可无,有则只能为空格或连字符;自身可以连写或拆分为三位+四位的形式,若拆分,中间间隔符也只能为空格或连字符。

用正则表达式将以上描述表达出来。

因为括号涉及到配对的问题,最终我将正则表达式拆分为有括号和无括号两个版本,放在数组里。无括号版正则表达式如下:

var re = /^1?[-\s]?\d{3}[-\s]?\d{3}[-\s]?\d{4}$/;

解法

完整代码如下:

function telephoneCheck(str) {
    var re = [/^1?[-\s]?\d{3}[-\s]?\d{3}[-\s]?\d{4}$/,/^1?[-\s]?\(\d{3}\)[-\s]?\d{3}[-\s]?\d{4}$/];
    return re.some(function(item){
        return item.test(str);
    });
}

也可以:

function telephoneCheck(str) {
    var re = /^1?[-\s]?\d{3}[-\s]?\d{3}[-\s]?\d{4}$|^1?[-\s]?\(\d{3}\)[-\s]?\d{3}[-\s]?\d{4}$/;
    return re.test(str);
}
Clone this wiki locally