在方法中迭代,直到用户仅以字母表形式提供输入
本文关键字:字母表 输入 用户 方法 迭代 | 更新日期: 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;
...