海外用户填写带国家码的号码,提交后红字提示只能输入数字,去掉加号加空格才通过,回访时又拨不通。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,校验正则只认本地十一位手机号,加号、空格和括号都会被当成非法字符,写入数据库时又把国家码截掉,号码本身就不完整。
「国际电话号码校验」这类改动最怕改一半,回滚脚本先准备好,再动生产。报错里带路径的,先去看那个路径在不在、权限对不对。
preg_match('/^\+?[0-9\s\-()]{6,20}$/', $phone);
$phone = preg_replace('/[^0-9+]/', '', $phone);
# 入库保留 +86 前缀
同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
具体做法是,允许加号和空格括号 先做清洗然后再做格式校验;按用户选择的国家码取对应的号码长度和规则;入库的时候保留完整国际格式 显示前再格式化。
最后用这个标准收尾,国际号码能够正常提交成功 客服回访时拨号一次就能接通。
