C# 如何检查用户输入
本文关键字:用户 输入 检查 何检查 | 更新日期: 2023-09-27 18:33:55
我有一个允许字符的字符串。我希望该用户只能使用此字符。我的想法是遍历 unser 输入字符串并比较 char 与 char。但是我遇到的问题是,当允许的字符串中的第一个字符是"A"并且用户输入"B"中的第一个字符是时,它会给我一个错误......
现在完全困惑
string allowed = "abc";
string read= Console.ReadLine();
for (int i = 0; i < allowed.Length; i++ )
{
if (allowed[i] == read[i])
{
Console.WriteLine("Okay");
}
else
{
Console.WriteLine("Invalid char on" +index);
}
}
检查用户输入是否包含任何不允许的字符,则需要嵌套循环,因为要将用户输入中的每个字符与允许的字符进行比较:
foreach(var r in read)
{
bool isValid = false;
foreach(var c in allowed)
{
// if we found a valid char set isValid to true
if(c == r)
isValid = true;
}
// if it's still false then the current char
// doesn't match any of the allowed chars
// so it's invalid
if(!isValid)
{
Console.WriteLine("the string has invalid char(s)");
break;
}
}
或者,为了简化此操作,您可以使用 LINQ:
bool isInvalid = read.Any(c => !allowed.Contains(c));
如果你想知道哪些字符是无效的,你可以使用Except
方法:
var invalidChars = read.Except(allowed);
foreach(var c in invalidChars)
{
Console.WriteLine(c);
}
您需要在允许的字符内搜索用户输入的字符,也可以使用正则表达式。
搜索方法:
private string allowed = "abc";
private string userInput = "some string entered";
bool stringIsValid = false;
for (int i = 0; i < userInput.Length; i++)
{
if (!allowed.IndexOf(userInput[i]))
{
stringIsValid = false;
break; // You can stop the loop upon the first occurance of an invalid char
}
}
正则表达式方法:
private string allowed = "abc";
private string userInput = "some string entered";
bool stringIsValid = Regex.IsMatch(allowed, userInput);
请注意,正则表达式方法更灵活。如果你了解正则表达式,你会发现它非常强大。
第一个循环中需要另一个循环:
string allowed = "abc";
string read= Console.ReadLine();
for (int i = 0; i < read.Length; i++ )
{
bool isValid = false;
for (int j = 0; j < allowed.Length; j++)
{
if (read[i] == allowed[j])
{
isValid = true;
break;
}
}
if (isValid)
{
Console.WriteLine("Okay");
}else{
Console.WriteLine("Invalid char on" +index);
}
}
现在,你说的是"read
中的每个角色都必须与allowed
中的完全相同"。你想说的是(我认为(是"read
中的每个角色都必须出现在allowed
的某个地方"——这就是第二个循环所做的。它会在allowed
中查找角色,如果找到它,则isValid
设置为 true
。否则找不到该字符,并且不正确。
正如此处的其他答案所述,您可以使用 LINQ 或(最好(正则表达式 (regex( 来处理类似的事情。我认为这是家庭作业,或者您不熟悉 C# 或编程,所以我提供了一个基本答案(希望(帮助您了解当前不适用于您的代码的内容。
如果这确实是一个与家庭或学习相关的问题,那么让我建议你下次把它放在你的问题中,因为不禁止问家庭作业。
如果您想弄清楚基础知识,我们将使用的"现实世界"解决方案对您没有帮助,因此,如果我们知道这是关于学习的东西,那么我们将提供对您更有用的答案。
使用集合存储不允许的项(而不是纯字符串(时,它会打开一个全新的 LINQ 表达式范围,您可以使用:
public static void Main(string[] args)
{
var allowed = new List<string> { "a", "b", "c" };
var read = Console.ReadLine().Select(c => c.ToString()).ToList();
if (read.All(allowed.Contains))
{
Console.WriteLine("Okay");
}
else
{
var firstNotAllowed = read.First(a => !allowed.Contains(a));
var firstIndex = read.FindIndex(a => !allowed.Contains(a));
Console.WriteLine("Invalid char: {0}, at index: {1}", firstNotAllowed, firstIndex);
}
}