【问题标题】:Telephone number validation电话号码验证
【发布时间】:2015-04-29 10:27:25
【问题描述】:

我有这个代码来验证电话号码,但它看起来有点尴尬。我猜有更好的方法来解决这个问题。我怎样才能提高效率?

public static bool validTelephoneNo(string telNo)
{
    bool condition = false;
    while (condition == false)
    {
        Console.WriteLine("Enter a phone number.");
        telNo = Console.ReadLine();
        if (telNo.Length > 8)
        {
            if (telNo.StartsWith("+") == true)
            {
                char[] arr = telNo.ToCharArray();
                for (int a = 1; a < telNo.Length; a++)
                {
                    int temp;

                    try
                    {
                        temp = arr[a];
                    }

                    catch
                    {
                        break;
                    }

                    if (a == telNo.Length - 1)
                    {
                        condition = true;
                    }
                }
            }
        }
    }
    return true;
}

【问题讨论】:

标签: c#


【解决方案1】:

不要自己尝试这样做,使用已经有人为您完成了艰苦工作的库,例如 libphonenumber

例子:

public static bool validTelephoneNo(string telNo)
{
    PhoneNumber number;
    try
    {
        number = PhoneNumberUtil.Instance.Parse(telNo, "US");  // Change to your default language, international numbers will still be recognised.
    }
    catch (NumberParseException e)
    {
        return false;
    }

    return number.IsValidNumber;
}

这个库将处理来自不同国家的电话号码的解析和格式化。这不仅可以确保该号码在相关国家/地区有效,还可以让您过滤掉高级号码和“假”号码(例如美国的 555)。

【讨论】:

    【解决方案2】:

    使用正则表达式可以轻松实现您的目标:

    public static bool validTelephoneNo(string telNo)
    {
        return Regex.Match(telNo, @"^\+\d{1,7}$").Success;
    }
    

    此模式与声明完全相同:由整数组成,长度小于 8 位,开头有一个加号,如果条件更复杂,也可以修改此模式。

    【讨论】:

      【解决方案3】:

      试试

      Console.WriteLine("Enter a phone number.");
      bool isValid = new System.Text.RegularExpressions.Regex(@"^[+]\d{1,7}$").IsMatch(Console.ReadLine());
      

      正则表达式检查是否只有一个数字(1 到 7 位),前面有 +。缺点是这样你无法进一步处理,你可能需要从控制台读取该行到一个新变量。

      【讨论】:

        猜你喜欢
        • 2012-10-27
        • 1970-01-01
        • 1970-01-01
        • 2011-02-03
        • 2011-09-05
        • 2015-09-08
        • 2012-10-21
        相关资源
        最近更新 更多