任务是创建一段代码,用户必须在其中放置邮政编码。它必须是“字母+数字+字母+空格+数字+字母+数字”。它需要最多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();
答案 0 :(得分:2)
我不同意你应该使用正则表达式。这可以使用简单易读的代码轻松解决 - 无需过度复杂化。
首先,正如您已经完成的那样,您可以轻松获得字符串的长度。如果它是有效长度,那么只需检查字符串中的每个字符是否有效。您可以使用IsDigit中的IsLetter和char方法检查字符串中的任何给定字符是数字还是字母。你可以写一个方法,如:
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
更适合构建一次类成员,但为了便于说明,我将它们放在方法中。