Javascript Regular Expression从页面源检测所有电话号码

Ddo*_*Ddo 3 javascript regex phone-number

任何人都可以帮我弄清楚如何做到这一点?我现在的一个是(我在某个地方找到它):

/(\+(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7)[0-9. -]{4,14})(?:\b|x\d+)/

它可以检测到:+ 86-400-660-8680

但不是这个:

  • +1 888 204 3539
  • 1-800-667-6389
  • + 1-400-660-8680
  • (877)359-6695
  • 800-692-7753

你能帮帮我吗?1正则表达式可以检测所有这些类型的电话号码,或者至少我可以使用2-3个正则表达式来检测它们.

Ham*_*mZa 6

因此,这是满足您需求的巨大正则表达式:

(+?(?:( ?: 9 [976] \ d | 8 [987530] \ d | 6 [987] \ d | 5 [90] \ d | 42 \ d | 3 [875] \ d | 2 [ 98654321] \ d | 9 [8543210] | 8 [6421] | 6 [6543210] | 5 [87654321] | 4 [987654310] | 3 [9643210] | 2 [70] | 7 | 1)|((?:9 [976] \ d | 8 [987530] \ d | 6 [987] \ d | 5 [90] \ d | 42 \ d | 3 [875] \ d | 2 [98654321] \ d | 9 [8543210] | 8 [6421] | 6 [6543210] | 5 [87654321] | 4 [987654310] | 3 [9643210] | 2 [70] | 7 | 1))))[0-9。-] {4,14})( ?:\ b | x \ d +)

在线演示

这里就是我的表现如何做到这一点。


Fra*_*non 6

你的正则表达式经历了很多麻烦,以确保国家代码符合一套严格的规则,但似乎并不关心它后面的内容.这意味着以下示例将与之匹配:

+86-0000
+86----0
+86-1-1-1-1
Run Code Online (Sandbox Code Playgroud)

以下正则表达式要短得多,对国家代码不严格,但对电话号码的整体结构要求严格.

(?:\+?(\d{1,3}))?[- (]*(\d{3})[- )]*(\d{3})[- ]*(\d{4})(?: *x(\d+))?\b
Run Code Online (Sandbox Code Playgroud)

它与上面的示例不匹配,并且会匹配这些示例:

18005551234
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800 555 1234x5678
8005551234 x5678
1    800    555-5555
1----800----555-5555
Run Code Online (Sandbox Code Playgroud)

对于所有这些示例,捕获组将包含以下值:

  • 第1组:国家代码(例如:1或86)
  • 第2组:区号(例如:800)
  • 第3组:交换(例如:555)
  • 第4组:订户号码(例如:1234)
  • 第5组:延期(例如:5678)