我有一个网站的形式,需要我们的电话号码输入为跟踪目的,而这是非常必要的,在这种情况。我想试图消除的用户进入垃圾数据 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}?$

你可以找到一种(尽管有些日)的讨论 在这里,.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top