libphonenumber-js校验有效手机号返回false的问题咨询
libphonenumber-js 美国手机号校验失败问题排查
核心错误点
你的使用方式不符合库的API设计规则,具体问题如下:
isPossiblePhoneNumber全局方法的入参仅支持原始手机号字符串+可选地区码,不接收parsePhoneNumber返回的实例对象,你用JSON.stringify把实例转成JSON字符串传入,本质上传的是结构化对象字符串,不是纯手机号,库无法识别,自然永远返回false- 你已经调用
parsePhoneNumber拿到了解析后的手机号实例,不需要再调用全局校验方法,实例本身自带校验能力,不需要额外做字符串转换
正确实现代码
针对10位美国手机号的表单校验场景,正确写法如下:
const phoneNumber = libphonenumber.parsePhoneNumber(contact_asset, 'US') if (phoneNumber) { // 长度合规性校验:仅校验位数是否符合美国手机号规则 console.log(phoneNumber.isPossible()); // 严格有效性校验:校验号段是否合法,表单场景推荐优先用这个 console.log(phoneNumber.isValid()); console.log(phoneNumber.formatNational()); }
如果你不需要拿到解析后的实例,只想快速校验原始输入,直接用全局方法传原始字符串即可,不需要先做解析:
// 注意第一个参数必须是用户输入的原始手机号字符串,不要传解析后的对象/JSON串 const isPhoneValid = libphonenumber.isPossiblePhoneNumber(contact_asset, 'US')
补充说明:不要混淆两个校验方法的适用场景
isPossible()/全局isPossiblePhoneNumber():仅校验手机号长度是否符合对应地区规范,校验速度快,适合前置快速过滤明显无效的输入isValid():会匹配对应地区的手机号号段分配规则,能识别出长度正确但号段不存在的无效号码,适合表单提交前的最终校验
内容的提问来源于stack exchange,提问作者Tex Evans
相关产品推荐
相关产品推荐

