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

Python电话号码清洗函数逻辑错误排查咨询

电话号码清洗函数的逻辑错误分析与修复

核心错误点

原代码逻辑完全违背需求规则,导致所有输入都被判定为无效,具体错误如下:

1. 判断条件完全颠倒

需求要求最终号码以62开头,且去掉62前缀后剩余11位数字(即总长度为13位),但原代码的判断条件是:

if len(cleaned_number) == 11 and cleaned_number.startswith('62'):

这意味着它要求清洗后的号码本身是11位且以62开头,之后还额外拼接62前缀,生成62+62xxxxxxxxx这种错误格式,完全不符合需求。这种判断逻辑和规则完全相反,自然所有合法输入都无法满足条件。

2. 未处理合法的前缀格式

印尼手机号常见格式有08xxxxxxxxx、+62xxxxxxxxx、8xxxxxxxxx,原代码没有针对这些前缀做转换,直接按原始清洗后的数字判断,导致这些合法号码被误判。

3. 重复添加62前缀

即使原判断条件满足,代码会把已经带62的11位数字再拼接一次62,生成错误的13位号码(如6262123456789),不符合最终格式要求。


修正后的代码

def clean_phone_number(phone_lists):
    phone_clean = []
    
    for phone in phone_lists:
        # 移除所有非数字字符
        cleaned_number = ''.join(filter(str.isdigit, phone))
        
        # 处理不同前缀,统一转换为62开头的格式
        if cleaned_number.startswith('0'):
            # 去掉开头的0,替换为62
            processed_number = '62' + cleaned_number[1:]
        elif cleaned_number.startswith('62'):
            # 已有62前缀,直接保留
            processed_number = cleaned_number
        else:
            # 无有效前缀,直接添加62
            processed_number = '62' + cleaned_number
        
        # 验证:总长度必须为13位(62+11位数字),且全为数字
        if len(processed_number) == 13 and processed_number.isdigit():
            phone_clean.append(int(processed_number))
        else:
            phone_clean.append('Invalid number')
    
    return phone_clean

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

phone_clean = clean_phone_number(phone_lists)
print(phone_clean)

修正说明

  1. 前缀统一处理:针对输入的不同前缀(0开头、62开头、无前缀)做对应转换,确保最终号码以62开头。
  2. 正确的验证逻辑:检查处理后的号码长度为13位(符合62+11位数字的要求),且全为数字,满足规则。
  3. 避免重复前缀:根据输入前缀的实际情况处理,不会重复添加62。

运行修正后的代码,输出与预期一致:

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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:57:37