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

如何在Dart中检测字符串是否包含带区号或前缀0的电话号码

Dart字符串中检测包含电话号码的解决方案

问题根源

你的代码无效是因为正则用了^和$锚点——这两个符号要求整个字符串完全匹配规则,但实际场景里电话号码只是字符串的一部分,自然匹配失败。同时原正则的规则也不够灵活,没法覆盖带国家区号的场景。

修正后的代码

void detectPhoneNumber(String message) {
  // 匹配规则:支持+开头的1-3位国家区号,或0开头;后续跟7-11位数字
  // \b确保匹配独立号码,避免从长数字串中截取片段
  final phoneRegex = RegExp(r'\b(?:\+\d{1,3}|0)\d{7,11}\b');
  
  if (phoneRegex.hasMatch(message)) {
    print("检测到电话号码!");
    // 提取所有匹配到的号码
    final matches = phoneRegex.allMatches(message);
    for (var match in matches) {
      print("找到号码:${match.group(0)}");
    }
    return;
  }
  print("未检测到电话号码!");
}

void main() {
  detectPhoneNumber("RG44NO7QR2 Confirmed. xxx sent to  Grace 0712345678 on 4/7/23 at 10:52 AM.");
  detectPhoneNumber("我的国际号码是+8613800138000,本地号是01012345678");
}

正则规则说明

  • \b:单词边界,确保匹配的是独立号码,不会误把长数字串的一部分当成有效号码
  • (?:\+\d{1,3}|0):非捕获分组,匹配两种合法开头:
    • \+\d{1,3}:+开头的1-3位国家区号(比如+86、+1)
    • 0:本地号码的0开头
  • \d{7,11}:后续跟7-11位数字,覆盖不同地区的号码长度需求,可根据实际场景调整位数范围

关键调整点

  1. 移除^和$锚点,允许电话号码出现在字符串任意位置
  2. 增加\b单词边界避免误匹配
  3. 优化正则规则,同时支持国家区号和本地号码格式
  4. 新增提取所有匹配号码的逻辑,方便后续业务处理

内容的提问来源于stack exchange,提问作者Benson Karue

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:35:14