【问题标题】:C# removing whitespaces and hypheC# 删除空格和连字符
【发布时间】:2014-03-27 01:07:04
【问题描述】:

您好,我是一名初学者 c# 程序员。

需要帮助编写小代码程序控制台以邀请用户输入他们的电话号码,不带空格和连字符 (-) 进行验证,如果用户不遵守这些条件,则显示错误消息。并创建一个循环,重新要求用户输入相同的信息以重试。

Console.WriteLine("Please enter your phone no.: \t");
            string n = Console.ReadLine();
            char[] delimiters = new char[] { ' ', '-' };
            string textBox = Convert.ToString(n);
            string[] numtel = textBox.Split(delimiters);
            bool test = false;

【问题讨论】:

  • 您需要什么帮助?
  • 您可以允许空格/- 并在提交时删除它们...

标签: c#


【解决方案1】:

这是您任务的简单解决方案:

bool isValid = false;

while(!isValid){
  Console.WriteLine("Please enter your phone no.: \t");
  string phone = Console.ReadLine();  
  isValid = !string.isNullOrWhiteSpace(phone) 
            && phone.s.IndexOfAny(new[] { '-', ' ' }) < 0;
  if (!isValid)
     Console.WriteLine("No spaces or '-' allowed");
}

但是,这是验证电话号码的一种糟糕方法。人们使用 '('、'.' 和可能的其他字符。

另一种方法是使用正则表达式,用于example

  isValid = !string.isNullOrWhiteSpace(phone)
             && Regex.IsMatch(phone, @"\(?\d{3}\)?-? *\d{3}-? *-?\d{4}");

【讨论】:

    【解决方案2】:

    你需要一个while循环:

    char[] delimiters = new char[] { ' ', '-' };
    string n;
    while(true)
    {
        Console.WriteLine("Please enter your phone no.: \t");
        n = Console.ReadLine();
    
        if(n.Length > 0 && !n.Any(delimiters.Contains)) break;
        else Console.WriteLine("Invalid value, try again.");
    }
    

    【讨论】:

    • 可能想在那个条件下添加一个 else 来显示错误信息。
    【解决方案3】:

    试试这个:

    var compareStrings = new [] { "-", " " };
    string phoneNo=string.Empty;
    do
    {
        Console.WriteLine("enter phone number without spaces and hyphens ");
        phoneNo = Console.ReadLine();
    }while(!(compareStrings.Any((c=>phoneNo.Contains(c)))));
    

    【讨论】: