Database 以某种标准格式存储电话号码是否更好;如输入的“;?
从程序员的角度来看,以某种规范格式存储电话号码有几个优点,但如果用户输入的号码突然看起来大不相同,可能会让用户感到困惑Database 以某种标准格式存储电话号码是否更好;如输入的“;?,database,language-agnostic,user-interface,Database,Language Agnostic,User Interface,从程序员的角度来看,以某种规范格式存储电话号码有几个优点,但如果用户输入的号码突然看起来大不相同,可能会让用户感到困惑 方法是什么?以您喜欢的方式存储,但在向用户显示之前,请将其转换为人类可读的格式。请不要强迫你的用户以你选择的格式输入电话号码,让他们随意输入 我就是这样做的。规范化电话号码的主要困难是确定正确的规范格式。不同的国家有不同的数字分组方式——在一个国家内,不同的数字可以进行不同的分组 过去(十年或更久以前)在英国,你有01-234-2345、021-234-1234、0334-23
方法是什么?以您喜欢的方式存储,但在向用户显示之前,请将其转换为人类可读的格式。请不要强迫你的用户以你选择的格式输入电话号码,让他们随意输入
我就是这样做的。规范化电话号码的主要困难是确定正确的规范格式。不同的国家有不同的数字分组方式——在一个国家内,不同的数字可以进行不同的分组 过去(十年或更久以前)在英国,你有01-234-2345、021-234-1234、0334-234234,甚至092324-213;现在英国的情况不同了——一般来说,数字更多了,我也不确定分组情况(缺课会让人的知识变得不那么及时) 处理国家前缀并表明内部国家拨号前缀有趣:+44(0)1394-726629是英国号码,国家代码44;从英国境外拨号时,请删除0;在英国境内拨号,不包括国际前缀,但包括0。请注意,如果您遵循E.123标准,则带有(0)的表单实际上无效 这类似于规范化邮件地址的问题——虽然没有那么复杂,但仍然很糟糕
此外,正如我在对HeavyWave回答的评论中所指出的,强迫人们以数字字符串形式输入电话号码而不使用标点符号是令人讨厌的。这样储存很好;只需以人类可读的格式呈现数据。有太多懒惰的网络表单编程了。英国是一个特例,因为我们有可变长度的STD(区域)代码和可变长度的订户号码本身。STD代码越长,编号越短。德国和其他一些国家也有类似的制度 数字大多是0中继(长途)前缀后的10位数字,但几十个地区也有大约9位数字
- 020 2345 5678(伦敦)加的夫、南安普敦、朴茨茅斯、考文垂和北爱尔兰
- 0115234 4567(诺丁汉)还有谢菲尔德、布里斯托尔、莱斯特、雷丁和利兹
- 0141 345 5678(格拉斯哥)以及伯明翰、爱丁堡、泰恩赛德、曼彻斯特和利物浦
- 01332 234 456(德比)大多数其他地区(约580个地区)也使用此格式
- 0175045678(Selkirk)和大约40个地区有一些短一位数的数字
- 017687 45678(Keswick)还有兰霍姆、霍恩比、霍克谢德、桑兹田庄、塞德伯格、威顿、劳顿海德、布兰顿、阿普尔比、普尔桥和戈斯福斯
- 016977 2345(Brampton)唯一使用“5+4”格式的地方李>
- 07812123456(手机号码)
无论哪种方法:确保不将列定义为数字,或使其太小。带格式的国际数字很容易超过16个字符。我会保留原始输入的混乱,但也会在数据库中插入一个已清理的表单。这只会减少数字的标点和空格。使用清理后的表单将允许轻松查找,而不必担心可能输入的不同样式。验证输入,但允许多种格式。将其存储为用户键入的格式,然后根据需要重新格式化输出
假设用户在注册公共电话簿应用程序时输入了他的号码。例如,我会在用户的“编辑我的个人资料”页面的文本字段中显示它。但我会在公共用户电话簿列表上显示重新格式化为标准格式的号码。我的直觉是根据实体的本地标准进行规范化,然后以规范化表示形式呈现。我通常喜欢存储剥离的号码,然后设置显示格式。由于我通常不构建应用程序供全球使用,所以我通常不必担心格式。但是,如果一个应用程序可以在世界各地使用,我可能会构建一个格式化模块,根据电话号码的区域设置进行格式化。职责分离-内容和呈现 把号码储存在一个罐子里