PHP: fastest way to check for invalid characters (all but a-z, A-Z, 0-9, #, -, ., $)?


Question

I have to check the buffer input to a PHP socket server as fast as possible. To do so, I need to know if the input message $buffer contains any other character(s) than the following: a-z, A-Z, 0-9, #, -, . and $

I'm currently using the following ereg function, but wonder if there are ways to optimize the speed. Should I maybe use a different function, or a different regex?

if (ereg("[A-Za-z0-9]\.\#\-\$", $buffer) === false)
{
    echo "buffer only contains valid characters: a-z, A-Z, 0-9, #, -, ., $";
}
1
9
8/13/2012 12:04:19 PM

Accepted Answer

Try this function:

function isValid($str) {
    return !preg_match('/[^A-Za-z0-9.#\\-$]/', $str);
}

[^A-Za-z0-9.#\-$] describes any character that is invalid. If preg_match finds a match (an invalid character), it will return 1 and 0 otherwise. Furthermore !1 is false and !0 is true. Thus isValid returns false if an invalid character is found and true otherwise.

33
11/15/2009 12:13:14 AM

Only allowing characters a-z uppercase or lowercase..

if (preg_match("/[^A-Za-z]/", $FirstName))
{
    echo "Invalid Characters!";
}

Adding numbers..

if (preg_match("/[^A-Za-z0-9]/", $FirstName))
{
    echo "Invalid Characters!";
}

Adding additional characters to allow (in this case the exclamation mark)..

(Additional characters must be preceded with an "\" as shown.)

if (preg_match("/[^A-Za-z0-9\!]/", $FirstName))
{
    echo "Invalid Characters!";
}

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon