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

需求:编写Python手机号清洗函数,处理指定列表并返回合规结果

手机号清洗函数修正方案

需求说明

编写函数接收手机号列表,返回清洗后的列表,规则如下:

  • 合规手机号需以62开头,去掉62后剩余部分为11位数字
  • 清洗后仍不符合规则的号码替换为'Invalid Number'

测试输入

phone = [
    '82123321123',
    '082321123321',
    '+6282-456-654-456',
    '+62 82 789 987 789',
    '14045',
    '82145-451-145'
]

预期输出

[6282123321123, 6282321123321, 6282456654456, 6282789987789, 'Invalid Number', 6282145451145]

原代码问题分析

原代码存在多处逻辑错误:

  1. 盲目给所有号码添加62前缀,忽略了部分号码本身已带+62的情况,导致前缀重复
  2. 使用translate方法时参数错误,且生成的处理结果未赋值回原数组,等于没执行清洗操作
  3. 缺少合规性校验逻辑,无法识别无效号码并替换
  4. 函数未返回处理结果,也未正确修改原列表

修正后的代码

def clean_phone_number(phone_list):
    cleaned_numbers = []
    for num in phone_list:
        # 过滤所有非数字字符,只保留数字
        pure_digits = ''.join([char for char in num if char.isdigit()])
        
        # 处理前缀,确保最终以62开头
        if pure_digits.startswith('62'):
            processed = pure_digits
        elif pure_digits.startswith('0'):
            # 去掉开头的0,再添加62前缀
            processed = '62' + pure_digits[1:]
        else:
            # 直接添加62前缀
            processed = '62' + pure_digits
        
        # 校验合规性:总长度13位(62+11位数字)且以62开头
        if len(processed) == 13 and processed.startswith('62'):
            cleaned_numbers.append(int(processed))
        else:
            cleaned_numbers.append('Invalid Number')
    
    return cleaned_numbers

# 执行测试
phone = [
    '82123321123',
    '082321123321',
    '+6282-456-654-456',
    '+62 82 789 987 789',
    '14045',
    '82145-451-145'
]

print(clean_phone_number(phone))

代码说明

  1. 清洗数字:遍历每个号码,过滤掉所有非数字字符(如+、-、空格),得到纯数字串
  2. 前缀处理:根据纯数字串的开头情况调整前缀,确保最终以62开头
  3. 合规校验:检查处理后的号码长度是否为13位(62+11位数字),符合则转为整数加入结果,否则加入'Invalid Number'
  4. 返回结果:函数返回处理后的列表,避免修改原输入列表,符合函数设计的低耦合原则

运行上述代码后,输出结果与预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:35:33