is_numeric() might NOT be the smart choice. read the manual and the user comments and you will see why
you need to remember negative numbers, decimals and floats ARE numeric, but does not mean every character is a number.
either use regex like you were doing, or preferable, look at the ctype_* functions
like this one:
http://www.php.net/ctype_digit
is_numeric is very usefull, but i think many people misunderstand what it does and use it when its not appropriate.