Подтвердить что ты не робот

Регулярное выражение - 2 буквы и 2 числа в С#

Я пытаюсь разработать регулярное выражение для проверки строки, которая приходит ко мне, как: "TE33" или "FR56" или любая последовательность, относящаяся к двум буквам и двум номерам.

Первые 2 символа должны быть буквенными, а 2 последних символа должны быть цифрами.

Я пробовал много комбинаций, и у меня не было успеха. Последнее, что я пробовал:

if(Regex.IsMatch(myString, "^[A-Za-z]{2}[0-9]{2}")){
}
4b9b3361

Ответ 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
}