You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何编写正则表达式仅允许匹配阿富汗国际区号开头的电话号码

符合需求的PHP阿富汗手机号正则校验方案

你之前的正则没有固定匹配阿富汗专属区号93,仅要求+或00开头后跟任意非0首数字,因此会匹配到其他国家区号的号码,无法满足需求。

基础版正则(完全匹配你给出的格式要求)

规则说明:

  • 强制开头为+93或0093
  • 区号后允许出现数字、空格、短横线、括号、点四种合法分隔符
  • 区号后内容长度不低于7位,符合常见手机号长度要求

正则表达式:/^(\+93|0093)[0-9 \-\(\)\.]{7,}$/

PHP使用示例:

function verifyAfghanPhone(string $phone): bool
{
    $pattern = '/^(\+93|0093)[0-9 \-\(\)\.]{7,}$/';
    return preg_match($pattern, trim($phone)) === 1;
}

// 测试示例
var_dump(verifyAfghanPhone('00937 878 1536')); // bool(true)
var_dump(verifyAfghanPhone('+937 878 1536')); // bool(true)
var_dump(verifyAfghanPhone('+8613800138000')); // bool(false) 非阿富汗区号直接拦截

增强版正则(更高精准度)

阿富汗手机号通常在区号后第一位固定为7,和你给出的示例格式一致,如果需要拦截无效号段,可以使用下面的正则:
/^(\+93|0093)7[0-9 \-\(\)\.]{6,}$/

高容错版校验逻辑

如果允许用户输入任意格式的分隔符,可先清理号码后再校验,兼容性更强:

function verifyAfghanPhone(string $phone): bool
{
    // 清理所有非数字、非+的字符,消除分隔符差异
    $cleanPhone = preg_replace('/[^0-9+]/', '', trim($phone));
    $pattern = '/^(\+93|0093)\d{7,}$/';
    return preg_match($pattern, $cleanPhone) === 1;
}

内容的提问来源于stack exchange,提问作者Basharmal。

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:57:03