如何确保用户在C#中输入正确的字符类型?

时间:2016-02-06 23:03:34

标签: c#

任务是创建一段代码,用户必须在其中放置邮政编码。它必须是“字母+数字+字母+空格+数字+字母+数字”。它需要最多7个字符并使用“if”语句来验证并发布错误,如果用户没有输入正确的类型字符。例如:A2B 1C3

string postalCode;
Console.WriteLine("Enter Your Postal Code");
postalCode = Console.ReadLine();

if (postalCode.Length == 7)
{
    Console.WriteLine("Your Postal Code is " + postalCode);
}
else
{
    Console.WriteLine("Error invalid Postal Code");
}

Console.ReadKey();

1 个答案:

答案 0 :(得分:2)

我不同意你应该使用正则表达式。这可以使用简单易读的代码轻松解决 - 无需过度复杂化。

首先,正如您已经完成的那样,您可以轻松获得字符串的长度。如果它是有效长度,那么只需检查字符串中的每个字符是否有效。您可以使用IsDigit中的IsLetterchar方法检查字符串中的任何给定字符是数字还是字母。你可以写一个方法,如:

cordova.inAppBrowser.open()

并在您的示例中使用它,如:

public bool IsValidPostcode(string postcode)
{
    return postcode.Length == 7
        && char.IsLetter(postcode[0]) 
        && char.IsLetter(postcode[2]) 
        && char.IsLetter(postcode[5])
        && char.IsDigit(postcode[1]) 
        && char.IsDigit(postcode[4]) 
        && char.IsDigit(postcode[6])
        && postcode[3] == ' ';
}

如果你想通过Regex解决这个问题,你可以通过以下方式达到同样的效果:

if (IsValidPostcode(postalCode))
{
    Console.WriteLine("Your Postal Code is " + postalCode);
}
else
{
    Console.WriteLine("Error invalid Postal Code");
}

修改

如果IsDigit和IsLetter的约束不合适,OP也可以自己建立一个允许的字符列表并检查它:

bool validPostCode = Regex.Match(postalCode, @"^[a-zA-Z]\d[a-zA-Z] \d[a-zA-Z]\d$").Success;

显然,public static bool IsValidPostcode(string postcode) { char[] validLetters = Enumerable.Range('a', 'z' - 'a' + 1) .Concat(Enumerable.Range('A', 'Z' - 'A' + 1)) .Select(c => (char)c).ToArray(); char[] validNumbers = Enumerable.Range('0', 10).Select(c => (char)c).ToArray(); return postcode.Length == 7 && validLetters.Contains(postcode[0]) && validLetters.Contains(postcode[2]) && validLetters.Contains(postcode[5]) && validNumbers.Contains(postcode[1]) && validNumbers.Contains(postcode[4]) && validNumbers.Contains(postcode[6]) && postcode[3] == ' '; } validLetters更适合构建一次类成员,但为了便于说明,我将它们放在方法中。