PHP: предел длины preg_match

Я использую preg_match('/[az]+[0-9]/', strtolower($_POST['value'])) для проверки того, что строка содержит как буквы, так и цифры. Как я могу изменить, чтобы он позволял всего 5 ~ 15 символов?

/[az]+[0-9]{5,15}/ не работает.

ОБНОВЛЕНИЕ Теперь я попробовал:

 if(preg_match('/^[a-z0-9]{5,15}$/', strtolower($_POST['value']))) { echo 'Valid!'; } else { echo 'NOOOOO!!!'; } 

Если я наберу «dfgdfgdfg» в поле ввода, он скажет «Valid!». Значение должно иметь как буквы, так и цифры, а также между 5-15 символами.

Хитрость заключается в использовании положительного взгляда, ну и в этом случае вам понадобятся два.

Итак, (?=.*[0-9]) будет проверять, есть ли хотя бы одна цифра на вашем входе. Что дальше? Вы догадались, мы просто добавим (?=.*[az]) . Теперь давайте объединим его с ответом анубхавы :

 (?=.*[0-9])(?=.*[az])^[a-z0-9]{5,15}$ 

Что это значит в целом?

  • (?=.*[0-9]) : проверьте, есть ли цифра
  • (?=.*[az]) : проверьте, есть ли письмо
  • ^ : начало начала строки
  • [a-z0-9]{5,15} : сопоставить цифры и буквы от 5 до 15 раз
  • $ : конец конца строки

С точки зрения PHP вы всегда должны проверить, установлена ​​ли переменная:

 $input = isset($_POST['value']) ? strtolower($_POST['value']) : ''; // Check if $_POST['value'] is set, otherwise assign empty string to $input if(preg_match('~(?=.*[0-9])(?=.*[az])^[a-z0-9]{5,15}$~', $input)){ echo 'Valid!'; }else{ echo 'NOOOOO!!!'; } 

Демо-версия онлайн-regex

Используйте привязки для начала строки и конца строки с правильным классом символов в вашем регулярном выражении:

 preg_match('/^[a-z0-9]{5,15}$/', strtolower($_POST['value'])); 

Ваше регулярное выражение: /[az]+[0-9]/ будет соответствовать 1 или нескольким английским буквам, а затем одной цифре.

попробуй это :

 <?php $str = your string here preg_match('/^[a-z0-9]{5,15}$/', $str); ?>