【问题标题】:Should I store telephone numbers as strings or integers? [duplicate]我应该将电话号码存储为字符串还是整数? [复制]
【发布时间】:2013-06-27 12:44:17
【问题描述】:

我正在尝试将电话号码存储为string 还是int。有什么想法吗?

【问题讨论】:

  • 答案已更新,只想写string
  • 一个Int32 (int) 最多可处理约 2 1/4 亿。电话号码(带区号)最多可达 9,999,999,999(如果包括 (000)-000-0000,则为 100 亿)。此外,此故障已经 on The Daily WTF。我希望这个问题这个评论会非常受欢迎,所以每个人都可以看到这个。
  • @ColeJohnson - 我只是想对此发表评论 - 我记得在 Daily WTF 上看到一个故事(我认为)关于电话号码被存储为 Int32 的情况,以及最大值(2147483647) 实际上对应于一个实时电话号码(或类似的东西)。
  • @Tim 这实际上就是我在评论后寻找的东西! :D 更新了链接(谷歌phone number site:thedailywtf.com)。另外,我相信那个电话号码仍然有效。可怜的灵魂。
  • @ColeJohnson - 感谢您找到(并发布)链接。 :)

标签: c#


【解决方案1】:

对于这样的任何情况,请考虑:我是否必须计算具有该值的任何内容?如果这没有任何意义,您应该使用字符串。在这种情况下,将电话号码用作数字是不合逻辑的,因此请使用字符串。

【讨论】:

  • 经验法则+1。
  • 这听起来可能很愚蠢,但电话号码不是数字吗?有 uint64 所以我实际上认为没有理由使用字符串,除非你不想验证它(这只能是一个不好的做法)。
  • 其实更多的是用一串数字表示的代码。但它肯定不会被视为一个数字。对电话号码进行算术运算是没有意义的。以零开头的数字呢?在法国,电话号码的形式是 0x xx xx xx xx,使用 uint64 意味着你失去了前导零。
【解决方案2】:

我建议使用字符串,因为这样可以让您在格式化和扩展名等非数字字符方面更加灵活。

【讨论】:

    【解决方案3】:

    我建议使用String - 除了其他任何东西,否则您将无法存储前导零。你绝对不应该使用int(太小)floatdouble(数据丢失风险太大); longBigInteger 可能是合适的(除了前导零问题),但坦率地说,我会选择 String。这样,您可以存储用户输入的任何破折号或空格,以便更容易记住数字,如果您愿意的话。

    参考:What's the right way to represent phone numbers?

    【讨论】:

      【解决方案4】:

      我强烈建议您为此使用string

      如果您要验证电话号码输入,那么您可以使用正则表达式库的 matcherpattern 来确保以正确的格式输入电话号码。

      【讨论】:

        猜你喜欢
        • 2011-11-04
        • 1970-01-01
        • 1970-01-01
        • 2014-07-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-04
        • 2021-05-15
        • 1970-01-01
        相关资源
        最近更新 更多