Validate US Telephone Numbers

Return true if the passed string is a valid US phone number.

The user may fill out the form field any way they choose as long as it is a valid US number. The following are examples of valid formats for US numbers (refer to the tests below for other variants):

555-555-5555
(555)555-5555
(555) 555-5555
555 555 5555
5555555555
1 555 555 5555

For this challenge you will be presented with a string such as 800-692-7753 or 8oo-six427676;laskdjf. Your job is to validate or reject the US phone number based on any combination of the formats provided above. The area code is required. If the country code is provided, you must confirm that the country code is 1. Return true if the string is a valid US phone number; otherwise return false.

Here are some helpful links:

检查传入的字符串是否为美国电话号码,并返回真假。

由所给示例可以看出。美国电话一共分为3个部分:

  • 第一部分是可以没有的国家代码,固定为1
  • 第二部分是区号,长度固定为3
  • 第三部分是电话号码,长度为7

对于电话号码,用正则匹配是最简单的。

这里先匹配电话号码。

\d{7}能识别连续7位数的电话号码,但示例中有分隔为3+4形式的号码,因而改写为符合3+4形式的正则,这里暂且假定分隔符为1个空格。

\d{3} \d{4}能识别被空格分隔的7位电话号码了,但还不够,现在在加上没有空格和有短横线的情况。

到这就已经完成电话号码了,接下来做区号。

区号有且只有3位数,但可能被()包裹着,与电话号码间可能隔着空格、短横线抑或什么都没有。这里先处理可能被()包裹的情况。

\(\d{3}\)匹配到了()以及里面的内容,但有的区号并没有被括号包裹。在加上这种情况。

现在将区号和电话号码连在一起。

行百里者半于九十,这里已经完成一半了,最后来考虑国家代码的问题。

美国的国家代码为1,先考虑是否以1开头。

考虑开头的1不存在的情况。

由示例得出国家代码与区号之间可能有1个空格。

先是有空格的。

然后是没有空格的。

现在匹配美国电话号码的正则表达式已经基本完成了。再考虑下添加了非法字符的情况。上面的正则能匹配到前一部分是美国电话的号码,但不能避免末尾添加了其他字符的情况。

因此还需要加上末尾的判断。

大功告成。现在编写函数来测试一下数据。

function telephoneCheck(str) {
return /^1? ?(\(\d{3}\)|\d{3})[ |-]?\d{3}[ |-]?\d{4}$/.test(str);
}

测试结果如下图。

测试结果显示编写的函数如期运行,这样FCC的高级算法第一题就完成了。

PS. 图中所用正则测试工具为开源中国的在线正则表达式测试

FCC高级编程篇之Validate US Telephone Numbers的更多相关文章

  1. FCC高级编程篇之Make a Person

    Make a Person Fill in the object constructor with the following methods below: getfirstname() getLas ...

  2. FCC高级编程篇之Exact Change

    Exact Change Design a cash register drawer function checkCashRegister() that accepts purchase price ...

  3. FCC高级编程篇之Symmetric Difference

    Symmetric Difference Create a function that takes two or more arrays and returns an array of the sym ...

  4. FCC高级编程篇之Record Collection

    Record Collection You are given a JSON object representing a part of your musical album collection. ...

  5. FCC(ES6写法) Validate US Telephone Numbers

    如果传入字符串是一个有效的美国电话号码,则返回 true. 思路:用正则,参考网上资料和js高级程序设计(5.4RegExp类型). let telephoneCheck = str => /^ ...

  6. Validate US Telephone Numbers

    function telephoneCheck(str) { // Good luck! //return true; var phone = /^1? ?(\d{3}|\(\d{3}\))[ -]? ...

  7. [Advanced Algorithm] - Validate US Telephone Numbers

    题目 如果传入字符串是一个有效的美国电话号码,则返回 true. 用户可以在表单中填入一个任意有效美国电话号码. 下面是一些有效号码的例子(还有下面测试时用到的一些变体写法): 555-555-555 ...

  8. Validate US Telephone Numbers FreeCodeCamp

    function telephoneCheck(str) { // 祝你好运 //var re = /^1? ?(\(\d{3}\)|\d{3})[ |-]?\d{3}[ |-]?\d{4}$/; / ...

  9. (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

随机推荐

  1. java中不同类如何相互访问变量值(新手见解,可能很low)

    最近在学基础java知识,这个是很常见的问题之一了,下面我要列出三种异类取值方法,当然不止这些,我选择了最简单的三种: 1.可以使用static静态变量,直接调用要访问类的属性和方法.因为 Java ...

  2. 利用Windows2003 IP安全策略实现服务器远程桌面端口(3389)访问控制

    1 开始 → 运行 → 对话框中输入gpedit.msc → 确定 2 打开“组策略编辑器” 计算机配置 → Windows配置 → 右键点击“IP安全策略,在 本地计算机” →选择“创建IP安全策略 ...

  3. 阿里云大学Linux学习路线图(学+测)重磅上线!

    推荐:阿里云大学—Linux运维学习路线(点击获取免费课程) 全新“学+测”模式 每阶段包含初.中.高三个难度等级考试,学完即测,找准短板,助您全方位自测掌握程度 课程系统全面 课程体系涵盖从Linu ...

  4. bzoj 2648: SJY摆棋子 KDtree + 替罪羊式重构

    KDtree真的很妙啊,真的是又好写,作用还多,以后还需更多学习呀. 对于这道题,我们求的是曼哈顿距离的最小值. 而维护的变量和以往是相同的,就是横纵坐标的最小值与最大值. 我们设为一个极为巧妙且玄学 ...

  5. jq——DOM文档处理

    内部插入:父子级关系 1 $(a).append($(b))把b插入到a里面(a里面的面后) $("div").append($("<p>段落</p&g ...

  6. windows下Word使用-快捷键

    1.word全屏显示——Alt+U+V 2.上标——Ctrl+Shift+= 3.下标——Ctrl+=

  7. BZOJ 3675 [Apio2014]序列分割 (斜率优化DP)

    洛谷传送门 题目大意:让你把序列切割k次,每次切割你能获得 这一整块两侧数字和的乘积 的分数,求最大的分数并输出切割方案 神题= = 搞了半天也没有想到切割顺序竟然和答案无关...我太弱了 证明很简单 ...

  8. [luogu] P4823 [TJOI2013]拯救小矮人(贪心)

    P4823 [TJOI2013]拯救小矮人 题目描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以 ...

  9. 一行代码解决IE兼容性问题

    在网站开发中不免因为各种兼容问题苦恼,针对兼容问题,其实IE给出了解决方案Google也给出了解决方案百度也应用了这种方案去解决IE的兼容问题 百度源代码如下 <!Doctype html> ...

  10. DelayQueue延时队列示例

    介绍: DelayQueue是一个无界阻塞队列,只有在延迟期满时才能从中提取元素.该队列的头部是延迟期满后保存时间最长的Delayed 元素. 使用场景: 缓存系统的设计,缓存中的对象,超过了空闲时间 ...