PHP 8中适配preg_match_all的尼日利亚手机号验证正则如何写
适配PHP 8 PCRE规范的尼日利亚手机号正则
可用正则代码
分两种场景按需选择:
1. 批量提取场景(适配preg_match_all)
用于从大段文本中提取所有符合格式的手机号,不会误匹配长数字串的片段:
$pattern = '/\b(?:\+?234[-.\s]*(?:\(\d{3}\)|\d{1,3})[-.\s]*|0\d{1,3}[-.\s]*)?\d{3}[-.\s]*\d{4}\b/';
使用示例:
$content = "测试号码列表:0000 000 0000、+234 1 000 0000、234(000)000-0000、+2340000000000"; preg_match_all($pattern, $content, $result); // 所有匹配到的号码存储在 $result[0] 数组中 print_r($result[0]);
2. 单号码校验场景
用于表单验证等需要判断整个字符串是否为合规号码的场景:
$pattern = '/^(?:\+?234[-.\s]*(?:\(\d{3}\)|\d{1,3})[-.\s]*|0\d{1,3}[-.\s]*)?\d{3}[-.\s]*\d{4}$/';
使用示例:
$phone = "+234(000) 000 0000"; if (preg_match($pattern, $phone)) { echo "号码格式合规"; }
正则规则说明
- 国家码兼容:
\+?234支持带+和不带+的234尼日利亚国家码前缀,后缀[-.\s]*允许国家码后接空格、短横线、点或无分隔符 - 前缀格式兼容:
(?:\(\d{3}\)|\d{1,3})同时支持带括号的3位运营商前缀、不带括号的1-3位前缀,适配所有你给出的带括号、短前缀格式 - 本地号兼容:同时支持11位普通手机号、8位固定电话格式,中间的分隔符支持空格、短横线任意组合,也支持无分隔符的纯数字格式
- 兼容性说明:所有语法均为PHP 8支持的标准PCRE特性,无自定义扩展,可直接用于所有PCRE系列函数
内容的提问来源于stack exchange,提问作者user627341
相关产品推荐
相关产品推荐

