首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >北美电话号码的正则表达式

北美电话号码的正则表达式
EN

Stack Overflow用户
提问于 2018-01-18 04:44:42
回答 1查看 156关注 0票数 0

我有一个下面的正则表达式来验证北美的数字。它工作得很好,但我有个小问题。下面是我的代码& regex:

代码语言:javascript
复制
$re = '/^\+(1)(((?!900)(?!976)[2-9][0-9]{2})((?!555)[2-9](?!11)[0-9]{2})[0-9]{4}$|\\\\+18([0,3-8])3((?!555)[2-9][0-9]{2})[0-9]{4})$/';
$str = '+18009876543';

preg_match($re, $str, $matches);
print_r($matches);

它返回总共4个匹配,但我只想要3,即完全匹配,group1(它将包含国家代码)和组2(10位数字电话号码)。

这就是我所得到的:

代码语言:javascript
复制
Array ( [0] => +18009876543 [1] => 1 [2] => 8009876543 [3] => 800 [4] => 987 )

但我想要的是:

代码语言:javascript
复制
Array ( [0] => +18009876543 [1] => 1 [2] => 8009876543 )
EN

回答 1

Stack Overflow用户

发布于 2018-01-18 05:10:06

代码语言:javascript
复制
/^\+(?:1)((?:(?!900)(?!976)[2-9][0-9]{2})(?:(?!555)[2-9](?!11)[0-9]{2})[0-9]{4})$|\\\\+18(?:[0,3-8])3(?:(?!555)[2-9][0-9]{2})[0-9]{4}$/

在PHP中:

代码语言:javascript
复制
<?php
$re = '/^\+(?:1)((?:(?!900)(?!976)[2-9][0-9]{2})(?:(?!555)[2-9](?!11)[0-9]{2})[0-9]{4})$|\\\\+18(?:[0,3-8])3(?:(?!555)[2-9][0-9]{2})[0-9]{4}$/';
$str = '+18009876543';

preg_match($re, $str, $matches);
print_r($matches);

为了实现这一点,我用?:实现了一些组的非捕获:

https://regex101.com/r/EfJ81h/1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48309690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档