验证电话号码C#

时间:2015-09-25 17:06:54

标签: c#

根据电话号码列表,假设电话号码是91 12 34 56,是不是可以正确拨打电话?因为紧急线路。

我正在尝试构建一个程序,如果用户输入以911开头的电话号码,则输出应为“不一致”,否则为“一致”。

这是我的代码:

static void Main(string[] args)
{
    var phoneList = new List<string>();
    string input;
    Console.WriteLine("The Phone Number: ");

    while ((input = Console.ReadLine()) != null)
    {
        phoneList.Add(input);
    }

    for (int i = 0; i < phoneList.Count; i++)
    {
        for (int j = 0; j < phoneList.Count; j++)
        {
            if (phoneList[i].Substring(0, 3).Equals(phoneList[j].Substring(0, 3)) && i != j)
            {
                Console.WriteLine("NOT CONSISTENT");
                return;
            }
        }
    }
    Console.WriteLine("CONSISTENT");
}

我输入911后,我的程序就会跳过if语句。为什么会这样?

编辑:电话号码也是最多十位的序列!

2 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。你在代码中遇到了一些错误,无论是逻辑错误还是结构错误。

首先,你的while循环会一直持续下去,因为它一直持续到输入为空...这是不可能发生的 - 最好的情况是,输入将是一个空字符串""

其次,你要检查字符串中输入的前三个数字(好)与列表中每个字符串的前三个数字(不好)。相反,您应该检查"911"

static void Main(string[] args)
{
    var phoneList = new List<string>();
    string input;
    Console.WriteLine("The Phone Number: ");

    while ((input = Console.ReadLine()) != "")
    {
        phoneList.Add(input);
    }    

    for (int i = 0; i < phoneList.Count; i++)
    {
        if (phoneList[i].Substring(0, 3) == "911")
        {
            Console.WriteLine("NOT CONSISTENT");
            return;
        }
    }
    Console.WriteLine("CONSISTENT");
}

然而,重要的是要注意,此代码不会检查任何特殊字符,空格等...它假定输入类似于1234567890而不是12 34 56 78 90。如果要删除所有空格,请确保在每个输入上使用String.Replace(" ", ""),然后再通过for循环运行它们。

答案 1 :(得分:1)

永远不会达到你的for循环,因为你的程序无法退出while循环(输入永远不会为null)。

此外,如果它将达到for循环算法不正确:它将每个电话号码的前三位数与前面收集的电话号码列表中其他电话号码的前三位数进行比较。

完成任务的更好方法是检查前三个字符是否不等于&#34; 991&#34;。您可以添加一个方法,例如名为IsValidPhoneNumber。之后可以扩展此方法以包含更多有效性检查(因为这非常复杂,您可以使用像GlobalPhone这样的库来执行此操作)。接下来,我们只在电话列表中添加一个号码,如果它有效。

由于您的程序不会轻易退出while循环(输入永远不会为null),您可能希望在某些时候对您的数字执行某些操作。为此,我添加了键入&#34; PRINT&#34;然后将添加到目前为止的列表。

private const string PRINT_PHONE_NUMBERS_IDENTIFIER = "PRINT";
private static readonly List<string> PhoneList = new List<string>();

static void Main(string[] args)
{
    Console.WriteLine($"Add phone numbers to phone list (or {PRINT_PHONE_NUMBERS_IDENTIFIER} to print list so far): ");

    string input;
    while ((input = Console.ReadLine()) != null) // Keeps reading since input will never be null.
    {
        if (input == PRINT_PHONE_NUMBERS_IDENTIFIER)
        {
            PrintAllNumbers();
        }
        else if (IsValidPhoneNumber(input))
        {
            Console.WriteLine("CONSISTENT");
            PhoneList.Add(input);
        }
        else
        {
            Console.WriteLine("NOT CONSISTENT");
        }
    }
}

private static bool IsValidPhoneNumber(string phoneNumber)
{
    return !phoneNumber.StartsWith("991");
}

private static void PrintAllNumbers()
{
    if (PhoneList.Any())
    {
        foreach (var phoneNumber in PhoneList)
        {
            Console.WriteLine(phoneNumber);
        }
    }
    else
    {
        Console.WriteLine("Phone list is empty");
    }
}
  

将电话号码添加到电话列表(或打印到目前为止打印列表):   
PRINT   
电话列表为空   
991   不一致   
PRINT   
电话列表为空   
1234567890   
一致的   
1235432665   
一致的   
PRINT   
1234567890   
1235432665

我已经把它带走了,但你可以通过将功能重构为一个单独的类来进一步改进程序。然后,您可以围绕它构建办公应用程序。 :)