我们的电话号码的核查
-
05-07-2019 - |
题
我有一个网站的形式,需要我们的电话号码输入为跟踪目的,而这是非常必要的,在这种情况。我想试图消除的用户进入垃圾数据 330-000-0000.我已经看到了一些选择的第三方验证的电话号码给你,但是。如果这是最好的选择,对于这种情况。但是如果你有用过这个第三方可以使一项建议,也将是极大的赞赏在这里。
但是我正在考虑检查的数量,对一套规则只是试图缩小这垃圾电话号码收到。
- 不555号
- 不包含相同的数字7
- 有效的区域代码(这随时可用)
- 不123-1234或123-4567
- 我猜我还可以计算出867-5309(嘿*)
这将导致在任何情况下,可以认为,不会允许用户进入他们的电话号码吗?你能想到的任何其他规则,一个电话号码,不应包含?任何其他想法吗?
解决方案
在我看来,你们把更多的精力投入到这比它保证。考虑:
如果你的目的是要防止的错误输入电话号码,然后你也许可以抓住超过90%的他们只是一个非常简单的检查。
如果你的目的是试图强迫用户提供有效的人数,他们是否想要得到这些信息出或没有,那么你已经采取了上一个毫无希望的任务-即使你们能够访问100%准确、最新的电信公司数据库来验证的确切数字输入目前的生活,你仍然没有获得任何保证,他们给了你是自己的。再一次,一个简单的检查将箔大多数人进入虚假的数字,但那些愿意尝试超过两次或三次 将 找到一种方法来打败你的尝试得到他们的数字。
无论哪种方式,一个简单的测试是要得到你了良好的效果,并进入更多复杂的规则集会采取了越来越多的时间,同时提供越来越多地点受益于你(而且还可能加入的误报,因为已经显示出具有"中的七个相同的数字"和867-5309情况下)。
其他提示
你可以做手机号验证的内部在你的应用程序的使用常规的表达方式。根据语言,你可以叫一个功能将返回真的,如果一个提供电话号码相匹配的表达。
PHP:
function phone_number_is_valid($phone) {
return (eregi('^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d{2}[- ]?\d{4}$', $phone));
}
你可以看一下不同的定期表达的在线。我发现一个以上的一个在 http://regexlib.com/DisplayPatterns.aspx?categoryId=7&cattabindex=2
编辑:一些特定语言的网站经常表达方式:
如果你可以验证的区域代码然后除非你 真的,真的 需要知道他们的电话号码你可能做的尽是合理的。
Amybe看看答案 这个问题.
867-5309是一个有效的电话号码被分配给人们在不同区域的代码。
在Django有一个漂亮的小普包叫localflavor这有很多国家特定的验证码,例如邮政编码或电话号码。你可以看看在来源也看到django如何处理这些国家您想使用;例如: 我们的形式验证.这可以是一个伟大的诉诸有关国家,你知道小小的。
你的客户还可以做什么我做的,这是给地方拍的数量。
此外,123-1234或123-4567仅仅是无效的号码,因为前缀始于1,但234-5678或234-1234实际上是有效的(虽然它看起来假).
如果你坚持只有美国和加拿大的格式化数字,我认为以下regex可能的工作:[2-9][0-9][0-9]-[2-9][0-9][0-9]-[0-9][0-9][0-9][0-9] & ![2-9][0-9][0-9]-555-[0-9][0-9][0-9][0-9]
你还需要考虑到十的数字拨号,其使用在一些地区现在:这是不同于长距离拨号(即,303-555-1234,而不是1-303-555-1234).在一些地方,一个有效的电话号码是十位数长;在其他人,这是七个。
这些参数的看起来很漂亮对我好,我也可能会避免数字开始与911是安全的。
在我研究我应该做的事先>.< 我发现,7相同的数字都是有效的电话号码。这样我就可以计算出这一规则。
这是一个快速的功能,使用(见下文)。我有接到一个邮政编码数据库,该数据库包含的城市码和前缀的数据每月更新。我经常想做一个数据浸到确认的前缀存在对该区域的代码。
public static bool isPhone(string phoneNum)
{
Regex rxPhone1, rxPhone2;
rxPhone1 = new Regex(@"^\d{10,}$");
rxPhone2 = new Regex(@"(\d)\1\1\1\1\1\1\1\1\1");
if(phoneNum.Trim() == string.Empty)
return false;
if(phoneNum.Length != 10)
return false;
//Check to make sure the phone number has at least 10 digits
if (!rxPhone1.IsMatch(phoneNum))
return false;
//Check for repeating characters (ex. 9999999999)
if (rxPhone2.IsMatch(phoneNum))
return false;
//Make sure first digit is not 1 or zero
if(phoneNum.Substring(0,1) == "1" || phoneNum.Substring(0,1) == "0")
return false;
return true;
}
我不nkow如果这是正确的地方,这是一个格式功能,而不是一种验证功能,我认为,让我们分享它与社会,也许有一天,它将有助..
Private Sub OnNumberChanged()
Dim sep = "-"
Dim num As String = Number.ToCharArray.Where(Function(c) Char.IsDigit(c)) _
.ToArray
Dim ext As String = Nothing
If num.Length > 10 Then ext = num.Substring(10)
ext = If(IsNullOrEmpty(ext), "", " x" & ext)
_Number = Left(num, 3) & sep & Mid(num, 4, 3) & sep & Mid(num, 7, 4) & ext
End Sub
我的验证功能是这样的:
Public Shared Function ValidatePhoneNumber(ByVal number As String)
Return number IsNot Nothing AndAlso number.ToCharArray. _
Where(Function(c) Char.IsNumber(c)).Count >= 10
End Function
我叫这个最后的功能@的OnNumberChanging(号码为String)方法的实体。
对于我们和国际电话验证,我发现这个代码的最合适的:
((\+[1-9]{1,4}[ \-]*)|(\([0-9]{2,3}\)[ \-]*)|([0-9]{2,4})[ \-]*)*?[0-9]{3,4}?[ \-]*[0-9]{3,4}?$
你可以找到一种(尽管有些日)的讨论 在这里,.