如何清洗印尼手机号:从原始列表提取标准化11位号码并自动补全国家代码
技术百科
碧海醫心
发布时间:2026-01-23
浏览: 次 本文提供一个健壮的python函数,用于批量清洗印尼手机号:移除所有非数字字符、校验是否以62开头且总长为13位(含62)、对缺失前缀的号码自动补全,并将不满足条件的条目统一标记为"invalid number"。
要正确清洗印尼手机号,关键在于三步处理:标准化(去除非数字字符)→ 前缀归一化(补全或校验62)→ 长度验证(必须为13位纯数字,即62 + 11位)。原始代码存在多个问题:未真正执行字符清理(translate未生效且语法错误)、未做有效性判断、直接修改原列表且无返回值。
以下是完整、可直接运行的解决方案:
import re
def clean_phone_number(phone_list):
"""
清洗印尼手机号列表,返回标准化后的结果列表。
规则:
- 仅保留数字字符
- 若以'62'开头且总长为13位 → 保留
- 若以'08'开头(印尼常见移动号段,隐含62)→ 替换为'628'
- 若以'8'开头(如'821...')→ 补前缀'62'
- 其他情况(长度≠13、含非法前缀等)→ 返回'Invalid Number'
"""
cleaned = []
for raw in phone_list:
# Step 1: 提取所有数字
digits = re.sub(r'\D', '', str(raw))
# Step 2: 前缀标准化与长度校验
if digits.startswith('62'):
if len(digits) == 13:
cleaned.append(int(digits)) # 符合要求:62 + 11位
else:
cleaned.append('Invalid Number')
elif digits.startswith('08') and len(digits) == 12:
# '08...' → 转为 '628...'(印尼08x等同于628x)
cleaned.append(int('62' + digits[1:]))
elif digits.startswith('8') and len(digits) == 11:
# 纯11位以8开头 → 补62(如'821...' → '62821...')
cleaned.append(int('62' + digits))
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]✅ 关键说明:
- re.sub(r'\D', '', ...) 是最可靠的方式清除所有非数字字符(空格、+、-、括号等),比手动替换符号更鲁棒;
- 不依赖正则匹配 \+62[0-9]{11}(该模式仅能匹配带+的原始格式,无法处理082...或纯821...等常见变体);
- 明确区分三种合法前缀场景:62xxx(直接校验)、08xxx(印尼本地号去0加62)、8xxx(补62),覆盖题目全部用例;
- 返回 int 类型确保输出与示例一致(如 6282123321123 而非字符串),同时保持 'Invalid Number' 为字符串类型,符合混合类型需求。
⚠️ 注意事项:
- 输入应为字符串或可转为字符串的类型(如数字ID),函数内部已做 st
r() 容错;
- 若需严格遵循“必须以62开头且后续11位”的定义(即禁止08转换),可简化逻辑为:仅接受 62 开头且 len==13,其余全为 'Invalid Number';
- 生产环境建议增加日志记录无效号码原始值,便于排查数据质量问题。
# 提供一个
# 多个
# 仅能
# python
# 三种
# 而非
# 并将
# 可直接
# app
# int
# 字符串
# git
# len
# 若以
# 字符串类型
# elif
# python函数
# number
# 印尼
# 质量问题
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Linux怎么设置磁盘配额_Linux系统Quot
- c++ std::future和std::prom
- Windows10系统怎么查看系统版本_Win10
- Win10怎么限制单程序CPU占用上限_Win10
- Python对象比较与排序_魔术方法解析【教程】
- 如何在Golang中处理通道发送接收错误_防止阻塞
- 如何使用Golang捕获测试日志_Golang t
- Windows10如何重置此电脑_Windows1
- PythonWeb前后端整合项目教程_FastAP
- php增删改查在php8里有什么变化_新特性对cu
- php怎么下载安装后测试是否成功_简单脚本验证方法
- 如何使用Golang处理静态文件缓存_提高页面加载
- Win11怎么更改系统语言为中文_Windows1
- C++中引用和指针有什么区别?(代码说明)
- Win10 BitLocker加密教程 Win10
- Win11怎么制作U盘启动盘_Win11原版系统安
- Win10怎么设置开机密码_Windows10账户
- Mac的Time Machine怎么用_Mac系统
- 如何在Golang中实现微服务负载均衡_Golan
- php本地部署支持nodejs吗_php与node
- 如何在Golang中指定模块版本_使用go.mod
- Win11怎么设置任务栏透明_Windows11使
- 如何在Golang中编写端到端测试_Golang
- PythonPandas数据分析教程_数据清洗与处
- php打包exe后无法写入文件_权限问题解决方法【
- php能控制zigbee模块吗_php通过串口与c
- Windows10系统怎么查看显卡驱动_Win10
- c++怎么使用std::unique实现去重_c+
- c++ atoi和atof函数用法_c++字符数组
- Win11如何更改任务栏颜色 Win11自定义任务
- c# Task.ConfigureAwait(tr
- Win11怎么设置声音输出设备_Windows11
- php怎么连接数据库_MySQL数据库连接的基础代
- LINUX如何删除用户和用户组_Linux use
- c# 在ASP.NET Core中管理和取消后台任
- Win11怎么关闭触摸键盘图标_Windows11
- 为什么Go建议使用error接口作为错误返回_Go
- Win11怎么清理C盘系统错误报告_Win11清理
- 怎么将XML数据可视化 D3.js加载XML
- Win11怎么设置夜间模式_Windows11显示
- c++20的std::format怎么用 比pri
- Win10怎样清理C盘阿里旺旺缓存_Win10清理
- 如何在Golang中捕获HTTP服务器错误_Gol
- 如何使用Golang实现错误包装与传递_Golan
- Win11色盲模式怎么开_Win11屏幕颜色滤镜设
- C#如何序列化对象为XML XmlSerializ
- 使用类变量定义字符串常量时的类型安全最佳实践
- 如何使用Golang构建简易投票统计功能_Gola
- 如何在Golang中实现并发消息队列消费者_Gol
- 获取 PHP 文件最后修改时间的正确方法


QQ客服