Dan*_*ski 15 database language-agnostic user-interface
从程序员的角度来看,以某种规范格式存储电话号码有几个优点,但如果突然输入的数字看起来很不一样,它可能会使用户感到困惑.
怎么走?
Ego*_*hin 21
根据您的喜好存储它,但在将其显示给用户之前将其转换为人类可读的格式.并且请不要强迫您的用户以您选择的格式输入电话号码,让他们只需按照自己的喜好输入即可.
我就是这样做的.
希望这是对旧问题更实际和更实用的答案.
看看https://github.com/googlei18n/libphonenumber.
正如@Gumbo所暗示的那样,我会将电话号码存储为E.164,上面的库会为您解析.它可以从几种不同的编程语言中使用.
对于数据库存储,您实际上可以使用E.164作为Base64(因为它具有讽刺意味的是有效的base64),并将Base64解码为字节.我相信像这样的字符串的字节数符合标准long
.我个人只是将E.164作为字符串存储在数据库中.
当然,您可能还应该存储用户在解析之前输入的内容,但我强烈建议您输入一些规范的数字,如E.164,以便将来与其他系统集成.
你的用户群是什么?
如果他们的地理位置有限(例如,仅限美国),并且您要严格验证数字,那么请为他们规范格式化数字 - 即,删除他们使用的任何格式(如数字之间的句点.. .)并加入短划线(如果他们不坚持你的格式,请不要失败验证......这只是意思).我将清理后的版本存储在数据库中,而不是剥离的数字; 它可以在生成自定义报告等时让您的生活更轻松.
如果您可能拥有来自世界各地的用户/号码,则最好保存他们使用的格式.另外,请不要忘记有时美国居民正在旅行并使用外国号码的情况:不要无意中阻止他们.
无论哪种方式:确保不要将列定义为数字,或将其设置得太小.带格式的国际号码很容易超过16个字符.
小智 6
将数字存储为规范格式和显示格式掩码.
收益:
烦恼:
英国是一个特例,因为我们有可变长度STD(区域)代码和可变长度用户号码本身.STD代码越长,数字越短.德国和其他一些国家也有类似的制度.
在0主干(长途)前缀之后,数字大多是10位数,但是数十个区域也有9位数字.
请注意,0800数字可以是不同的长度,例如0800 567 1234或0800 234 456.旧的0500数字也是较短的数字,例如0500 456 456.
另外,有些人喜欢将他们的号码分组234 234,而其他人则使用23 23 23(取决于实际数字).
存在以输入形式存储并存储在单个表单中的参数:
如果您将数字存储为数字序列,则可以通过考虑用户首选项或其区域设置并根据"规则"(无论它们可能是什么)分割数字,以您想要的任何方式输出数字.
如果您按输入存储,那么您将始终按照用户的预期显示它,但在使用之前您需要去除非数字值,如果它通常很昂贵.