在方法中迭代,直到用户仅以字母表形式提供输入

本文关键字:字母表 输入 用户 方法 迭代 | 更新日期: 2023-09-27 18:11:31

我在这个问题语句中显示了我输入代码的一部分。我只想从用户那里获得字母表的输入。在这里,我想迭代这个方法,直到用户用字母表提供输入。getInput是我类中的方法。

public string getInput() 
{
    Console.WriteLine("Please enter your name. If you want to send the parcel: ");
    this.NameOfSender = Console.ReadLine();
    return NameOfSender;
}

在这里,我想,如果用户输入错误的输入,这个代码应该打印消息"错误的输入。请输入有效的名称。"然后再次开始该方法。请帮我怎么做。

在方法中迭代,直到用户仅以字母表形式提供输入

//This regex pattern will accept alphabet only, no numbers or special chars like blank spaces
Pattern p = Pattern.compile("[a-zA-Z]"); 
do{
    Console.WriteLine("Please enter your name. If you want to send the parcel: ");
    this.NameOfSender = Console.ReadLine();
    boolean isOnlyAlpha = p.matcher(this.NameOfSender).matches();
}while(!isOnlyAlpha);

您可以使用正则表达式来验证用户输入,例如:

if(System.Text.RegularExpressions.Regex.IsMatch(input, @"['w's]+")) 
{
    ...

应该做的技巧

了解regex:http://www.regular-expressions.info/tutorial.html

edit:当然,用户的名字中可以有连字符,这样regex就不会真正捕获所有有效的名字。

//declare this variable in your class
public string Name = null;
//change the return type to void
public void getInput(){
    string CheckString = null;
    while (Name.IsNullOrEmpty()){
        bool IsValid = true;
        checkString = Console.ReadLine();
        foreach (char c in CheckString.ToCharArray()){
            if (!Char.IsLetter(c)){
                Console.WriteLine("Wrong Input!");
                IsValid = false;
                break;
            }
        }
        if (IsValid){
            Name = CheckString;
        }
    }
}

此循环将运行,直到用户给定的文本仅包含字母,当它发现此条件为true时,它将变量Name设置为用户给定的文字。

类似的东西(LinqAll(;不要忘记检查空输入(如果用户刚刚按下回车键(:

public string getInput() {
  Console.WriteLine("Please enter your name. If you want to send the parcel: ");
  while (true) {
    NameOfSender = Console.ReadLine();
    // if name is 
    //   1. Not empty
    //   2. Contains letters only
    // then return it; otherwise keep asking 
    if (!string.IsNullOrEmpty(NameOfSender) && 
         NameOfSender.All(c => char.IsLetter(c))) 
      return NameOfSender;
    Console.WriteLine("Wrong input. Enter name again");
  } 
} 

编辑:如果在字母之间允许空格(例如John Smith(,则可以在if:中使用正则表达式

    ...
    if (Regex.IsMatch(NameOfSender, @"^'p{L}+( 'p{L}+)*$")) 
      return NameOfSender;
    ...