我正在创建一个可以读取 VCard 的电话簿程序。问题在于电话号码。通常,他们在美国会是这样的:
0771234560
但如果电话号码来自国外,它看起来像这样。
+94771234560
或许(22)772324000
现在有+
和()
迹象要处理!我目前正在将电话号码(VCards 包含它们作为字符串)转换为数字。但是,如果我将允许电话号码作为字符串,那么用户可能会做一些疯狂的事情,例如在联系表单中插入姓名作为电话号码。
如何将电话号码存储为字符串但防止出现有问题的条目?
我正在创建一个可以读取 VCard 的电话簿程序。问题在于电话号码。通常,他们在美国会是这样的:
0771234560
但如果电话号码来自国外,它看起来像这样。
+94771234560
或许(22)772324000
现在有+
和()
迹象要处理!我目前正在将电话号码(VCards 包含它们作为字符串)转换为数字。但是,如果我将允许电话号码作为字符串,那么用户可能会做一些疯狂的事情,例如在联系表单中插入姓名作为电话号码。
如何将电话号码存储为字符串但防止出现有问题的条目?
绝对使用字符串,但要验证它。仅仅因为它是一个字符串并不意味着您必须接受任何数据。您应该考虑使用正则表达式(或者可能是一系列正则表达式)来验证数据。
不要只将其限制为特定字符 - 例如,您不想接受“)0(”作为电话号码 - 使用合理的模式。关于电话号码本地约定的维基百科页面可能在这方面有所帮助 -或者您可以寻找其他来源。您可能还需要考虑宽容一些,因为并非每个人都会遵循确切的模式。不过需要达到一个微妙的平衡。
不要对电话号码使用数字类型,坚持使用String
.
进行某种形式的输入验证。为您的电话号码定义一些限制,并在读取卡片时检查String
您的格式:如果电话号码不符合您的限制,则拒绝它。
在此站点周围搜索有关电话号码验证的问题/答案。
添加两个电话号码意味着什么?所以,IMO,不是一个数字。
您仍然应该尝试验证,但如果您想接受任何和所有任意的国际号码,包括当地的书写方式约定,那将是令人沮丧的。