in reply to Filtering CGI Input

Several things are wrong. /0-9/ will match '0-9' (exactly). And since it's a negated match, basically you are accepting all input unless it contains the literal text '0-9'.

You need a character class.

if( $sid =~ /^[^0-9]$/ ) { # exit here...... }

The above code states if there are any characters in the string that are not numbers 0 through 9, exit.

It might actually be better to do it this way though:

if( $sid !~ m/^([0-9]{1,5})$/ ) { # exit } else { $input = $1; }

...or better yet...

if( $sid =~ m/^([0-9]{1,5})$/ ) { $input = $1; } else { # exit }

I think negated matches ( the !~ operator ) are usually just a way of adding confusion, and should be avoided unless absolutely necessary.


Dave