V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zhou00
V2EX  ›  程序员

请教大家如何存储国际手机号数据?

  •  
  •   zhou00 · 2021-06-01 23:22:09 +08:00 · 2619 次点击
    这是一个创建于 1289 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一个手机号控件(对应表里的一个字段 telephone ),如下图。 存储内容是区号+文本形式(比如:+1-123456789 )。 同一个区号可能有多个国家,比如,+1 可能属于美国、加拿大。 https://i.imgur.com/SEERndK.png

    问题: 后端返回控件内容(+1-189008732 )给到前端,此时前端并不知道这里的+1 是属于美国还是加拿大,因此无法定位控件左边的区号。请问大家这种情况应该如何处理?

    12 条回复    2021-06-02 13:16:17 +08:00
    Y29tL2gwd2Fy
        1
    Y29tL2gwd2Fy  
       2021-06-01 23:58:07 +08:00 via Android
    看看 telegram 怎么做的
    xupefei
        2
    xupefei  
       2021-06-02 02:04:26 +08:00 via iPhone
    存 iso3166 国家代码,前段可以维护一个国家到手机国际代码的映射表
    xupefei
        3
    xupefei  
       2021-06-02 02:06:17 +08:00 via iPhone
    你要意识到有些地区是某国的海外属地,电话国家号和本土不一样…
    ericls
        4
    ericls  
       2021-06-02 05:12:00 +08:00 via iPhone
    手机号存属地有什么用?我经常就直接选美国 也没遇到过问题
    Rocketer
        5
    Rocketer  
       2021-06-02 07:00:51 +08:00 via iPhone
    看你到底想干什么了,为什么必须要区分美国还是加拿大?
    如果核心是国家,那就存国家,然后根据国家取区号。
    如果核心是区号,那就存取号,然后把所有国家都显示出来(如:美国 /加拿大)

    PS:区号本来就不是与国家绑定的,还有一个国家多个区号的呢
    mingl0280
        6
    mingl0280  
       2021-06-02 07:04:15 +08:00 via Android
    这个信息你没法查也不可能维护的,你存就存了完事了。
    zhou00
        7
    zhou00  
    OP
       2021-06-02 09:03:04 +08:00
    @Rocketer #5
    @xupefei #3 是这样的,控件在输入手机号时会根据前面选择的区号做规则校验,比如选择了美国的+1,此时按美国的手机号校验规则来校验。控件回显时,如果区号定位到加拿大的+1,号码可能就会提示“号码有误”。历史数据存的都是这样的数据(+1-123456789 ),为了兼容历史数据,想着前面再拼接一个国家的标识,但是这样感觉就会很怪
    ShuoHui
        8
    ShuoHui  
       2021-06-02 09:14:34 +08:00
    没有意义吧,我登录 tg 每次都是先看到加拿大就选加拿大,验证也能过。。
    ShuoHui
        9
    ShuoHui  
       2021-06-02 09:17:01 +08:00
    美国的号码的话还有区号可以验证吧。+1-(202)6666666,202 好像是华盛顿
    no1xsyzy
        10
    no1xsyzy  
       2021-06-02 09:44:12 +08:00
    一对多映射,别想了,加字段吧
    xuanbg
        11
    xuanbg  
       2021-06-02 10:30:26 +08:00
    国家信息里面绑定区号,表里存国家 ID 。如果需要冗余,就多存国家名称和区号两个字段
    Rocketer
        12
    Rocketer  
       2021-06-02 13:16:17 +08:00 via iPhone
    @zhou00 就美国和加拿大而言,号码规则是一样的,都是 NANP 标准。其他地区不了解,但各开发标准都建议使用 E.164 格式。所以你这个需求是不是可以精剪一下?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5506 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:07 · PVG 10:07 · LAX 18:07 · JFK 21:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.