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

如何在Swift中去除各类电话号码的区号并提取纯数字号码?

在Swift中提取电话号码的纯数字本地号码

这个需求很常见,我来给你一个能完美覆盖你列出的所有电话号码格式的Swift实现方案:

实现思路

我们可以通过两步完成目标:

  1. 先匹配并移除开头的国家区号前缀(覆盖你给出的美国+1、印度+91的所有变体形式)
  2. 再清理剩余字符串中的所有非数字字符,得到纯数字的本地号码

Swift代码实现

func extractLocalPhoneNumber(from input: String) -> String {
    // 匹配美国(+1/1/001)和印度(+91/91/0091/(+91))的国家区号前缀,含后续可选分隔符
    let prefixPattern = #"^(\+1|001|1|\+91|0091|91|\(\+91\))[-\s)]?"#
    guard let prefixRegex = try? NSRegularExpression(pattern: prefixPattern, options: .caseInsensitive) else {
        // 正则初始化容错(固定写法不会触发,仅做兜底)
        return input.components(separatedBy: CharacterSet.decimalDigits.inverted).joined()
    }
    
    // 移除匹配到的国家区号前缀
    let stringWithoutPrefix = prefixRegex.stringByReplacingMatches(
        in: input,
        options: [],
        range: NSRange(location: 0, length: input.utf16.count),
        withTemplate: ""
    )
    
    // 移除所有非数字字符,得到纯数字本地号码
    let digitsOnly = stringWithoutPrefix.components(separatedBy: CharacterSet.decimalDigits.inverted).joined()
    
    return digitsOnly
}

测试验证

用你给出的所有号码测试这个函数:

let testNumbers = [
    "+1-541-754-3010",
    "1-541-754-3010",
    "001-541-754-3010",
    "(541) 754-3010",
    "+91 5417543010",
    "+91-5417543010",
    "(+91)-5417543010"
]

for number in testNumbers {
    let localNumber = extractLocalPhoneNumber(from: number)
    print("\(number) → \(localNumber)")
}

输出结果

+1-541-754-3010 → 5417543010
1-541-754-3010 → 5417543010
001-541-754-3010 → 5417543010
(541) 754-3010 → 5417543010
+91 5417543010 → 5417543010
+91-5417543010 → 5417543010
(+91)-5417543010 → 5417543010

扩展说明

如果需要支持更多国家的区号,只需要扩展prefixPattern中的匹配项即可。比如要添加英国区号(+44/0044/44),只需要把正则修改为:

let prefixPattern = #"^(\+1|001|1|\+91|0091|91|\(\+91\)|\+44|0044|44)[-\s)]?"#

内容的提问来源于stack exchange,提问作者DIMPAL BHENDARKAR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:04:31