Search code examples
phppreg-matchnested-if

preg_match - For sure there is a better way to search for these characters


So, I want to check the users-input, if it contains some of these characters: " ' < >

I hope someone can show me a better way with less code

Thanks!

I used preg_match, but i just managed it with 4 nested if's.

/*Checks if the given value is valid*/

private function checkValidInput($input)
{
    /*If there is no " */
    if(preg_match('/"/', $input) == false)
    {
        /*If there is no ' */
        if(preg_match("/'/", $input) == false) 
        {
            /*If there is no <*/
            if(preg_match("/</", $input) == false) 
            {
                /*If there is no >*/
                if(preg_match("/>/", $input) == false) 
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}

Solution

  • You could create a regex class

    preg_match('#["\'<>]#', $input);
    

    Edit:

    If you need to check for all characters then use strpos() with for loop

    function checkInput($val) {
        $contains = true;
        $required = "<>a";
    
        for($i = 0, $count = strlen($required); $i < $count ; ++$i) {
            $contains = $contains && false !== strpos($val, $required[$i]);
        }
    
        return $contains;
    }
    
    var_dump(checkInput('abcd<>a')); // true
    var_dump(checkInput('abcd>a')); // false, doesn't contain <