FreeCodeCamp筆記之:Validate US Telephone Numbers

题目

Validate US Telephone Numbers
如果传入字符串是一个有效的美国电话号码,则返回true.
用户可以在表单中填入一个任意有效美国电话号码. 下面是一些有效号码的例子(还有下面测试时用到的一些变体写法):
555-555-5555
(555)555-5555
(555) 555-5555
555555 5555
5555555555
1 555 555 5555
在本节中你会看见如
800-692-7753
or8oo-six427676;
laskdjf
这样的字符串. 你的任务就是验证前面给出的字符串是否是有效的美国电话号码. 区号是必须有的. 如果字符串中给出了国家代码, 你必须验证其是1. 如果号码有效就返回true; 否则返回false.
当你遇到困难的时候,记得查看错误提示、阅读文档、搜索、提问。
这是一些对你有帮助的资源: RegExp

telephoneCheck("555-555-5555") 应该返回一个布尔值.
telephoneCheck("1 555-555-5555") 应该返回 true.
telephoneCheck("1 (555) 555-5555") 应该返回 true.
telephoneCheck("5555555555") 应该返回 true.
telephoneCheck("555-555-5555") 应该返回 true.
telephoneCheck("(555)555-5555") 应该返回 true.
telephoneCheck("1(555)555-5555") 应该返回 true.
telephoneCheck("1 555)555-5555") 应该返回 false.
telephoneCheck("1 555 555 5555") 应该返回 true.
telephoneCheck("1 456 789 4444") 应该返回 true.
telephoneCheck("123**&!!asdf#") 应该返回 false.
telephoneCheck("55555555") 应该返回 false.
telephoneCheck("(6505552368)") 应该返回 false
telephoneCheck("2 (757) 622-7382") 应该返回 false.
telephoneCheck("0 (757) 622-7382") 应该返回 false.
telephoneCheck("-1 (757) 622-7382") 应该返回 false
telephoneCheck("2 757 622-7382") 应该返回 false.
telephoneCheck("10 (757) 622-7382") 应该返回 false.
telephoneCheck("27576227382") 应该返回 false.
telephoneCheck("(275)76227382") 应该返回 false.
telephoneCheck("2(757)6227382") 应该返回 false.
telephoneCheck("2(757)622-7382") 应该返回 false.
telephoneCheck("555)-555-5555") 应该返回 false.
telephoneCheck("(555-555-5555") 应该返回 false.

思路

  1. 初看题目吓死宝宝了,这么多种情况;
  2. 应该是用正则表达式一种一种的配呗,要细心,慢慢来;
  3. 号码分析,正确号码应该是分3段:
    3.1 第一段为国家代码,固定为1位,切数字为1开头,可能存在空格,或者不是1 的情况;
    3.2 第二段为区号,固定3位,可能没有括号,也可能有括号;
    3.3 第三段为号码,固定7位,变化很多,有直接7位,也有 3位+(空格、短线)+4位,还有存在其他非法字符、大于7位的情况;
  4. 三段中间可能存在空格、短划线,也可能没有;
  5. 写的时候找到一个在线测试正则表达式的:工具;
  6. 在查看 RegExp 的定义的时候,发现了.test() 的方法,可以用来测试某个字符串是否符合正则表达式,本题正好用上;

解答

function telephoneCheck(str) {
  // 祝你好运
    return /^1? ?(\d{3}|\(\d{3}\))[ |-]?\d{3}[ |-]?\d{4}$/.test(str);
}
telephoneCheck("555-555-5555");

你可能感兴趣的:(FreeCodeCamp筆記之:Validate US Telephone Numbers)