Я не согласен, что вы должны использовать обычные выражения. Это можно легко решить с помощью простого и читаемого кода - не нужно более усложнять его.
Во-первых, как вы уже это сделали, вы можете легко получить длину строки. Если это допустимая длина, то это просто проверка того, что каждый символ в строке действителен. Вы можете использовать методы IsDigit и IsLetter от char, чтобы проверить, что любой символ в строке является числом или буквой. Вы могли бы написать такой метод, как:
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] == ' ';
}
и использовать это в вашем примере, как:
if (IsValidPostcode(postalCode))
{
Console.WriteLine("Your Postal Code is " + postalCode);
}
else
{
Console.WriteLine("Error invalid Postal Code");
}
Если вы хотите, чтобы посмотреть в решении этого через Regex, вы можете достичь того же эффекта через что-то вроде :
bool validPostCode = Regex.Match(postalCode, @"^[a-zA-Z]\d[a-zA-Z] \d[a-zA-Z]\d$").Success;
EDIT
Если ограничения из IsDigit и IsLetter не пригодны, ОП может также создать список допустимых символов себя и проверить против него:
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
и validNumbers
будет гораздо более уместно, построенной когда-члены класса , но я поставил их в рамках метода для удобства иллюстрации.
Посмотрите на регулярные выражения. Вы можете создать выражение, которое соответствует этой последовательности, и протестировать ввод с этим выражением. – David
Какой именно вопрос? – Alejandro
Возможный дубликат [C# - подтверждение для почтового индекса США или Канады] (http://stackoverflow.com/questions/14942602/c-validation-for-us-or-canadian-zip-code) –