Search code examples
phpregexfloating-pointnumbers

Regular Expression (avoid float numbers)


I want a pattern to create a "is_id()" function to validate user input before mysql query. The pattern most contain ONLY numbers, my problem is avoid the float numbers:

function is_id($id) {          
    $pattern = "/^[0-9]+/";      
        if(preg_match($pattern,$id)) {      
            echo "ok";      
        } else {      
            echo "error";       
        }    
} 


is_id(0) // error  
is_id(-5) // error  
is_id(-5.5) // error  
is_id(1.5) // ok <-- THIS IS THE PROBLEM  
is_id(10) // ok  
is_id("5") // ok  
is_id("string") // error

Solution

  • You're missing the trailing $ in your pattern. In is_id(1.5) your pattern is matching the 1 and stopping. If you add a trailing $ (as in ^[0-9]+$) then the pattern will need to match the entire input to succeed.