-
Notifications
You must be signed in to change notification settings - Fork 1.4k
FCC 高级算法题 —— Validate US Telephone Numbers
TheaAo edited this page Apr 12, 2017
·
1 revision
我的思路和解法。
最先发布在我的个人博客。
输入字符串,判断其格式是否是有效的美国电话号码,返回判断结果。
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);
}