Я использую 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); ?>