地址创建功能c#

时间:2017-04-06 10:03:40

标签: c#

所以,我正在制作学校比萨饼计划,要求客户提供详细信息,如姓名电话号码和地址。我想这样做,以便客户在填写地址时必须有一个数字,空格和字母,我创建了一个应该出错的方法并告诉客户他们的地址无效,但这种方法似乎没有工作得很好。请帮忙

以下是我当前方法的代码:

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;
    }

目前,即使我有数字,空格和字母,它也会阻止所有内容。

4 个答案:

答案 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);
}