将电话号码存储为字符串时如何防止输入错误?

Posted

技术标签:

【中文标题】将电话号码存储为字符串时如何防止输入错误?【英文标题】:How can I prevent bad inputs when storing phone numbers as strings? 【发布时间】:2012-09-02 03:17:33 【问题描述】:

我正在创建一个可以读取 VCard 的电话簿程序。问题在于电话号码。通常,他们在美国会是这样:

0771234560

但如果电话号码来自国外,它会是这样的。

+94771234560 或者(22)772324000

现在有+() 标志要处理!我目前正在将电话号码(VCards 包含它们作为字符串)转换为数字。但是,如果我将允许电话号码作为字符串,那么用户可能会做一些疯狂的事情,例如在联系表单中插入姓名作为电话号码。

如何将电话号码存储为字符串但防止出现有问题的输入?

【问题讨论】:

我会去掉所有非数字字符。这些是显示问题。 我会使用一个字符串并使用***.com/questions/8196771/… 使其成为正确的正则表达式 【参考方案1】:

绝对使用字符串,但要验证它。仅仅因为它是一个字符串并不意味着您必须接受 任何 数据。您应该考虑使用正则表达式(或者可能是一系列正则表达式)来验证数据。

不要只限于特定字符 - 例如,您不想接受 ")0(" 作为电话号码 - 使用合理的模式。Wikipedia page on local conventions for phone numbers 可能在这方面很有帮助 - 或者您可以寻找其他来源。您可能还想考虑稍微宽松一些,因为并非每个人都会遵循确切的模式。不过需要实现微妙的平衡。

【讨论】:

【参考方案2】:

不要使用数字类型的电话号码,坚持使用String

进行某种形式的输入验证。对您的电话号码定义一些限制,并且在读取卡片时,根据您的格式检查String:如果电话号码不符合您的限制,则拒绝它。

在此网站上搜索有关电话号码验证的问题/答案。

【讨论】:

【参考方案3】:

添加两个电话号码意味着什么?所以,IMO,不是一个数字。

您仍应尝试验证,但如果您想接受任何和所有任意国际号码,包括有关其书写方式的当地约定,那将令人沮丧。

【讨论】:

以上是关于将电话号码存储为字符串时如何防止输入错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止电话号码被转换为 Skype 链接?

标准化的国际电话号码字段格式为字符串

React - 如何将电话号码格式化为用户类型

如何将字符串号码格式化为美国电话号码格式

如何在电话号码输入中插入连字符?

如何防止excel身份证号码变成科学计数法(后四位变成0)