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

PHP正则验证带+号的国际手机号并保留+号方案

PHP手机号正则验证(保留+号)解决方案

首先明确:你代码里的+号丢失不是正则的问题,是变量赋值时的语法错误导致的!

问题根源

你写的$str = +212600000000 ;没有给字符串加引号,PHP会把这个表达式当成数值字面量,开头的+会被当作正数符号直接忽略,所以变量$str里从一开始就没有+号,自然输出时看不到。

正确实现步骤

1. 修正变量赋值

字符串必须用单引号或双引号包裹,才能保留+号:

$str = "+212600000000";
// 若允许开头有空格,也可以写成:
// $str = " +212600000000";

2. 优化正则表达式

你原来的正则/^[0-9 +-]+$/过于宽松,允许任意位置的+、-和空格,甚至多个+号,不符合手机号规则。根据你的需求(支持国家码+手机号格式,包含+、-、数字),推荐两种针对性正则:

情况1:允许开头一个+,中间可带-分隔(如+212-600000000)

/^\+?[0-9]+(?:-[0-9]+)*$/
  • 规则解析:
    • ^:匹配字符串开头
    • \+?:可选的+号(若要求必须带国家码,去掉?即可)
    • [0-9]+:至少一位数字
    • (?:-[0-9]+)*:允许0或多个-+数字的组合(非捕获组,不占用匹配结果)
    • $:匹配字符串结尾

情况2:严格匹配国家码+纯数字手机号(无-,如+212600000000)

如果不需要支持-分隔,用更严格的正则:

/^\+[0-9]{10,15}$/
  • 规则解析:要求开头必须是+,后面跟10-15位数字(符合国际手机号的常规长度范围)

3. 完整测试代码

纯数字带+号版本

<?php
// 正确赋值,保留+号
$str = "+212600000000";

// 使用严格正则验证
if (preg_match('/^\+[0-9]{10,15}$/', $str)) {
    echo "Valid phone <br>";
    echo $str;
    // 输出:
    // Valid phone
    // +212600000000
} else {
    echo "Not valid Phone";
}
?>

支持-分隔版本

<?php
$str = "+44-7975-777666";

if (preg_match('/^\+?[0-9]+(?:-[0-9]+)*$/', $str)) {
    echo "Valid phone <br>";
    echo $str;
    // 输出:
    // Valid phone
    // +44-7975-777666
} else {
    echo "Not valid Phone";
}
?>

内容的提问来源于stack exchange,提问作者AUB CHF

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:27:51