第2课:匹配电话号码

验证电话号码也是一项棘手的任务,这取决于你所接收到的输入类型。如果包含外州号码(需要区号)或者国际号码(需要前缀),都会使正则表达式变得更加复杂。再加上不同用户输入电话的习惯也各不相同(例如,有些人喜欢加上破折号或空格,而有些人则不会),这也进一步增加了难度。

下面列出了一些你在实际数据中可能遇到的电话号码。请编写一个正则表达式,既能匹配这些号码,又能捕获正确的区号部分。

练习 2: 匹配电话号码
Task Text  
匹配 415-555-1234 To be completed
匹配 650-555-2345 To be completed
匹配 (416)555-3456 To be completed
匹配 202 555 4567 To be completed
匹配 4035555678 To be completed
匹配 1 416 555 9292 To be completed
提示

要提取电话号码中的区号,我们可以直接使用正则表达式 (\d{3}),捕获开头的三位数字即可。

不过,如果我们还希望完整地匹配整个电话号码,可以使用如下表达式:1?[\s-]?\(?(\d{3})\)?[\s-]?\d{3}[\s-]?\d{4}。这个表达式可以拆解为几部分:1? 表示可选的国家代码(如美国的 1),\(?(\d{3})\)? 用于捕获区号(允许带或不带括号),\d{3} 和 \d{4} 分别代表电话号码的中间三位和末尾四位数字,而 [\s-]? 则用来匹配各个部分之间可能存在的空格或破折号。

解决上面的问题以继续到, 或者可以参考答案