Регулярное выражение - 2 буквы и 2 числа в С#
Я пытаюсь разработать регулярное выражение для проверки строки, которая приходит ко мне, как: "TE33" или "FR56" или любая последовательность, относящаяся к двум буквам и двум номерам.
Первые 2 символа должны быть буквенными, а 2 последних символа должны быть цифрами.
Я пробовал много комбинаций, и у меня не было успеха. Последнее, что я пробовал:
if(Regex.IsMatch(myString, "^[A-Za-z]{2}[0-9]{2}")){
}
Ответы
Ответ 1
Вам не хватает завершающего якоря.
if(Regex.IsMatch(myString, "^[A-Za-z]{2}[0-9]{2}\z")) {
// ...
}
Здесь демо.
РЕДАКТИРОВАТЬ: Если вы можете иметь что-нибудь между начальными двумя буквами и последними 2 цифрами:
if(Regex.IsMatch(myString, @"^[A-Za-z]{2}.*\d{2}\z")) {
// ...
}
Здесь демо.
Ответ 2
Это должно заставить вас начать с двух букв и заканчивая двумя цифрами.
[A-Za-z]{2}(.*)[0-9]{2}
Если вы знаете, что всегда будет только два и два, вы можете
[A-Za-z]{2}[0-9]{2}
Ответ 3
Просто для удовольствия, здесь не-регулярное выражение (более читаемое/поддерживаемое для таких простаков, как я) решение:
string myString = "AB12";
if( Char.IsLetter(myString, 0) &&
Char.IsLetter(myString, 1) &&
Char.IsNumber(myString, 2) &&
Char.IsNumber(myString, 3)) {
// First two are letters, second two are numbers
}
else {
// Validation failed
}
ИЗМЕНИТЬ
Кажется, я неправильно понял требования. Приведенный ниже код гарантирует, что первые два символа и последние два символа строки проверяются (если длина строки равнa > 3)
string myString = "AB12";
if(myString.Length > 3) {
if( Char.IsLetter(myString, 0) &&
Char.IsLetter(myString, 1) &&
Char.IsNumber(myString, (myString.Length - 2)) &&
Char.IsNumber(myString, (myString.Length - 1))) {
// First two are letters, second two are numbers
}
else {
// Validation failed
}
}
else {
// Validation failed
}