Регулярное выражение для двух букв, за которым следуют 4 цифры

Строка должна начинаться с «S2», за которой следуют любые 4 цифры.

Соответствующая строка – «S20165».

Я пытаюсь использовать следующий код, но он всегда эхо нормально, даже если есть 5 или 6 цифр.

$string='S20104'; if(preg_match('/S2[0-9]{4}/', $string)){ echo 'OK'; } else{ echo 'NOT OK'; } 

Вы должны использовать якоря:

 /^S2[0-9]{4}$/ 

^ соответствует началу строки, а $ соответствует концу строки, поэтому это позволит убедиться, что вы проверяете полную строку, а не только подстроку.

Вы также можете использовать \d вместо [0-9] . В PHP, если вы не используете модификатор 'u', функции preg * не являются Unicode, поэтому они эквивалентны.

Проблема в том, что preg_match ищет совпадение внутри строки.

 S2123456 ^^^^^^ matches 

Вы можете привязать свое регулярное выражение, используя ^ (начало строки) и $ (конец строки):

 '/^S2[0-9]{4}$/' 
  • Смотрите, как работает онлайн: ideone
  • Подробнее о якорях: regularexpresssions.info/anchors.html

Вам также нужно совместить начало и конец строки

 /^S2[0-9]{4}$/ 
 $string='S20104'; if(preg_match('/^S2[0-9]{4}$/', $string)){ echo 'OK'; } else{ echo 'NOT OK'; } 

вы пропустили начало ^ и закончили $

 '/^S2[0-9]{4}$/'