如何用Python phonenumbers获取各国手机号的规定位数?
获取各国手机号规定位数(基于phonenumbers库)
可以通过phonenumbers库的元数据对象直接获取对应国家/地区移动号码的合法长度范围,无需从示例号码推导。具体实现步骤如下:
核心实现代码
import phonenumbers def get_mobile_number_valid_lengths(country_code): # 通过国家代码获取地区编码(如中国86对应"CN") region_code = phonenumbers.region_code_for_country_code(country_code) if not region_code: return None # 获取对应地区的号码元数据 metadata = phonenumbers.metadata_for_region(region_code) # 提取移动号码的描述对象 mobile_number_desc = metadata.mobile # 返回合法长度的元组(固定长度则为单元素元组,多长度则包含所有可能值) return mobile_number_desc.possible_lengths # 示例使用 # 中国手机号长度 print(get_mobile_number_valid_lengths(86)) # 输出:(11,) # 美国手机号长度 print(get_mobile_number_valid_lengths(1)) # 输出:(10,) # 印度手机号长度(部分地区有10/11位) print(get_mobile_number_valid_lengths(91)) # 输出:(10, 11)
关键说明
- 你之前的尝试仅获取了顶层元数据对象,未深入到
mobile子对象的possible_lengths属性,这是获取合法长度的核心入口。 possible_lengths返回的是元组,包含该国家/地区所有合法的移动号码长度,覆盖固定长度和多长度两种场景。- 若需获取固定电话等其他类型号码的长度,只需将
metadata.mobile替换为metadata.fixed_line、metadata.toll_free等对应类型即可。
备选方案(无需额外库)
如果不想依赖phonenumbers,也可以直接解析libphonenumber的原始元数据文件(XML格式),但操作复杂度较高,不推荐。
内容的提问来源于stack exchange,提问作者user21143082
相关产品推荐
相关产品推荐

