Строка должна начинаться с «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}$/'
Вам также нужно совместить начало и конец строки
/^S2[0-9]{4}$/
$string='S20104'; if(preg_match('/^S2[0-9]{4}$/', $string)){ echo 'OK'; } else{ echo 'NOT OK'; }
вы пропустили начало ^ и закончили $
'/^S2[0-9]{4}$/'