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

带国家码的手机号正则验证问题求助

带国家码的手机号正则验证解决方案

问题核心规则

需要验证的手机号需满足:

  • 必须以+或-开头
  • 包含8-16位数字,可在任意位置插入连字符-
  • 不能包含空格
  • 支持多个号码用逗号,分隔

原有正则的问题

  1. 第一个正则 /^[+-][1-9]{0,1}[0-9-]{0,16}[,]$/

    • 强制要求结尾必须有逗号,单个合法号码无法匹配
    • 未严格控制数字总位数(仅限制字符长度,未区分数字和连字符)
    • 不支持多号码的正确分隔逻辑
  2. 第二个正则 ^[+-][0-9-]{0,16}+(,[+-][0-9-]{0,16}+)*$

    • 语法错误:{0,16}+属于重复量词叠加,正则引擎无法解析
    • 未区分数字和连字符,无法保证数字总位数在8-16之间
    • 未限制空格,会匹配包含空格的无效号码

正确的正则表达式

^[+-](?=(?:.*\d){8,16})[-\d]+(?:,[+-](?=(?:.*\d){8,16})[-\d]+)*$

正则拆解说明

  • ^[+-]:匹配号码开头的+或-
  • (?=(?:.*\d){8,16}):正向预查,确保当前号码段内包含8-16个数字(忽略连字符的干扰)
  • [-\d]+:匹配后续的数字和连字符,确保无空格等非法字符
  • (?:,[+-](?=(?:.*\d){8,16})[-\d]+)*:匹配用逗号分隔的多个合法号码段,(?:...)为非捕获组,避免不必要的内存占用

验证效果

  • 有效号码全部匹配:+18790912345、+18790112345,+18790123409、+1-2569890912345等
  • 无效号码全部排除:+1909890(数字不足8位)、9800112345(无开头符号)、+1 9092345690(包含空格)

内容的提问来源于stack exchange,提问作者Boopathi Vkl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:47:34