I use preg_match('/[a-z]+[0-9]/', strtolower($_POST['value'])) for check that the string contains both letters and numbers. How can I change so it just allow 5 ~ 15 characters? 
/[a-z]+[0-9]{5,15}/ doesn't work.
UPDATE Now I tried:
if(preg_match('/^[a-z0-9]{5,15}$/', strtolower($_POST['value']))) {
    echo 'Valid!';
}
else {
    echo 'NOOOOO!!!';
}
If I type "dfgdfgdfg" in the input field it will say "Valid!". The value has to have both letters and numbers, and between 5-15 characters.
The trick is to use a positive lookahead, well in this case you'll need two.
So (?=.*[0-9]) will check if there is at least a digit in your input. What's next? You guessed it, we'll just add (?=.*[a-z]). Now let's merge it with anubhava's answer:
(?=.*[0-9])(?=.*[a-z])^[a-z0-9]{5,15}$
What does this mean in general?
(?=.*[0-9]) : check if there is a digit(?=.*[a-z]) : check if there is a letter^ : match begin of string[a-z0-9]{5,15} : match digits & letters 5 to 15 times$ : match end of stringFrom the PHP point of view, you should always check if a variable is set:
$input = isset($_POST['value']) ? strtolower($_POST['value']) : ''; // Check if $_POST['value'] is set, otherwise assign empty string to $input
if(preg_match('~(?=.*[0-9])(?=.*[a-z])^[a-z0-9]{5,15}$~', $input)){
    echo 'Valid!';
}else{
    echo 'NOOOOO!!!';
}
Online regex demo
Use line start and line end anchors with correct character class in your regex:
preg_match('/^[a-z0-9]{5,15}$/', strtolower($_POST['value']));
Your regex: /[a-z]+[0-9]/ will actually match 1 or more English letters and then a single digit.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With