贝利信息

如何清洗印尼手机号码并标准化为11位有效格式

日期:2026-01-23 00:00 / 作者:霞舞

本文提供一个健壮的python函数,用于批量清洗手机号列表:移除空格、连字符、加号等非数字字符,自动补全国家代码“62”,并校验最终是否为以“62”开头、总长13位(即“62”+11位数字)的有效号码;无效号码统一替换为字符串 `'invalid number'`。

要实现符合印尼规范的手机号清洗逻辑,关键在于三步:标准化(去除非数字字符)→ 补全前缀 → 校验长度与起始码。原始代码存在多个问题:未真正执行字符串清理(translate 用法错误且未赋值)、未处理已含 62 或 +62 的情况、缺少有效性判断与异常替换。

以下是完整、可直接运行的解决方案:

import re

def clean_phone_number(phone_list):
    cleaned = []
    for num in phone_list:
        # 步骤1:仅保留数字字符
        digits_only = re.sub(r'\D', '

', str(num)) # 步骤2:标准化前缀 —— 若以 '62' 开头且长度为13,则保留;若以 '08' 开头(常见印尼本地号),替换为 '628';否则尝试补 '62' if digits_only.startswith('62'): candidate = digits_only elif digits_only.startswith('08'): candidate = '62' + digits_only[1:] # 去掉开头的 0,补 62 else: candidate = '62' + digits_only # 步骤3:严格校验 —— 必须是 13 位纯数字,且以 '62' 开头 if len(candidate) == 13 and candidate.startswith('62') and candidate.isdigit(): cleaned.append(int(candidate)) else: cleaned.append('Invalid Number') return cleaned # 测试数据 phone = [ '82123321123', '082321123321', '+6282-456-654-456', '+62 82 789 987 789', '14045', '82145-451-145' ] result = clean_phone_number(phone) print(result) # 输出:[6282123321123, 6282321123321, 6282456654456, 6282789987789, 'Invalid Number', 6282145451145]

关键说明:

⚠️ 注意事项:

此方案兼顾准确性、可读性与工程鲁棒性,可直接集成至数据清洗流水线。