所以,我正在制作学校比萨饼计划,要求客户提供详细信息,如姓名电话号码和地址。我想这样做,以便客户在填写地址时必须有一个数字,空格和字母,我创建了一个应该出错的方法并告诉客户他们的地址无效,但这种方法似乎没有工作得很好。请帮忙
以下是我当前方法的代码:
public static string ReadAddress(String prompt) // YOU DIDN'T SPELL THIS CORRECTLY
{
string userInput = " ";
bool success = false;
while (!success)
{
Console.Write(prompt);
try
{
userInput = Console.ReadLine();
if (userInput.Length <= 70 && userInput.Length > 8) //checks the length of the user input
{
success = true; //Assumes input is correct
bool letter = false;
bool space = false;
bool number = false;
foreach (char character in userInput)
{
letter = Char.IsLetter(character);
space = Char.IsWhiteSpace(character);
number = Char.IsNumber(character);
}
success = letter & space & number;
}
else
{
success = false; // enables loop to exit
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
return userInput;
}
目前,即使我有数字,空格和字母,它也会阻止所有内容。
答案 0 :(得分:4)
如果您曾看过一封信,那么您想要记住这一事实(同上其他字符类型)。
responseInterceptor(res: ResponseOptions, ri: RequestInfo):ResponseInterceptor {
console.log("call responseInterceptor");
return res;
}
(另外,我知道这个检查会让一些人感到厌烦,因为他们住在名为的房子里,没有数字)
答案 1 :(得分:2)
您可以更进一步,而不是检查每个字符,使用正则表达式来检查输入字符串的模式。
所以检查一个数字,然后是一个空格,然后是一个字母:
success = Regex.IsMatch(userInput, "\d [A-Z]", RegexOptions.IgnoreCase); //'IgnoreCase' means that [A-Z] matches uppercase and lowercase.
但这只匹配一个数字和一个字母。您可以稍微修改模式以匹配完整地址:
success = Regex.IsMatch(userInput, "\d+( [A-Z]+)+", RegexOptions.IgnoreCase);
如果你的房子可能出现3rd Avenue
:
success = Regex.IsMatch(userInput, "\d+( \w+)+");
//Don't need to ignore case anymore, since \w is a word boundary and matches any letter, and numbers.
答案 2 :(得分:0)
将您的代码更改为:
foreach (char character in userInput)
{
letter |= Char.IsLetter(character);
space |= Char.IsWhiteSpace(character);
number |= Char.IsNumber(character);
}
这样你就不会在每个角色上覆盖这些标志。目前,这种工作的唯一方法是将最后一个字符同时标识为字母,空格和数字(不可能是afaik)。 您可以在此处详细了解此运算符:https://msdn.microsoft.com/en-us/library/h5f1zzaw.aspx
答案 3 :(得分:0)
实际上你只在for
声明中检查你的最后一个角色!您必须将for
声明正文更改为:
foreach (char character in userInput)
{
letter = letter || Char.IsLetter(character);
space = space || Char.IsWhiteSpace(character);
number = number || Char.IsNumber(character);
}