Search code examples
phpregexpreg-matchregular-language

regular expressions for url parser


<?php

    $string = 'user34567';

            if(preg_match('/user(^[0-9]{1,8}+$)/', $string)){
                echo 1;
            }

?>

I want to check if the string have the word user follows by number that can be 8 symbols max.


Solution

  • You're very close actually:

    if(preg_match('/^user[0-9]{1,8}$/', $string)){
    

    The anchor for "must match at start of string" should be all the way in front, followed by the "user" literal; then you specify the character set [0-9] and multiplier {1,8}. Finally, you end off with the "must match at end of string" anchor.

    A few comments on your original expression:

    1. The ^ matches the start of a string, so writing it anywhere else inside this expression but the beginning will not yield the expected results
    2. The + is a multiplier; {1,8} is one too, but only one multiplier can be used after an expression
    3. Unless you're intending to use the numbers that you found in the expression, you don't need parentheses.

    Btw, instead of [0-9] you could also use \d. It's an automatic character group that shortens the regular expression, though this particular one doesn't save all too many characters ;-)