验证电话号码也是一项棘手的任务,这取决于你所接收到的输入类型。如果包含外州号码(需要区号)或者国际号码(需要前缀),都会使正则表达式变得更加复杂。再加上不同用户输入电话的习惯也各不相同(例如,有些人喜欢加上破折号或空格,而有些人则不会),这也进一步增加了难度。
下面列出了一些你在实际数据中可能遇到的电话号码。请编写一个正则表达式,既能匹配这些号码,又能捕获正确的区号部分。
| Task | Text | |
| 匹配 | 415-555-1234 | ![]() |
| 匹配 | 650-555-2345 | ![]() |
| 匹配 | (416)555-3456 | ![]() |
| 匹配 | 202 555 4567 | ![]() |
| 匹配 | 4035555678 | ![]() |
| 匹配 | 1 416 555 9292 | ![]() |
| 提示 | 要提取电话号码中的区号,我们可以直接使用正则表达式 (\d{3}),捕获开头的三位数字即可。 不过,如果我们还希望完整地匹配整个电话号码,可以使用如下表达式:1?[\s-]?\(?(\d{3})\)?[\s-]?\d{3}[\s-]?\d{4}。这个表达式可以拆解为几部分:1? 表示可选的国家代码(如美国的 1),\(?(\d{3})\)? 用于捕获区号(允许带或不带括号),\d{3} 和 \d{4} 分别代表电话号码的中间三位和末尾四位数字,而 [\s-]? 则用来匹配各个部分之间可能存在的空格或破折号。 |