PHP:检查无效字符的最快方法(除了a-z,A-Z,0-9,#, - ,。,$)?

时间:2009-11-14 23:29:48

标签: php regex validation

我必须尽快检查缓冲区输入到PHP套接字服务器。为此,我需要知道输入消息$ buffer是否包含除以下内容之外的任何其他字符:a-z,A-Z,0-9,#, - ,.和$

我目前正在使用以下ereg功能,但想知道是否有方法可以优化速度。我应该使用不同的功能,还是使用不同的正则表达式?

if (ereg("[A-Za-z0-9]\.\#\-\$", $buffer) === false)
{
    echo "buffer only contains valid characters: a-z, A-Z, 0-9, #, -, ., $";
}

6 个答案:

答案 0 :(得分:33)

尝试此功能:

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

[^A-Za-z0-9.#\-$]描述任何无效的字符。如果preg_match找到匹配项(无效字符),则会返回 1 0 。此外,!1 false !0 true 。因此,isValid如果找到无效字符则返回 false ,否则返回 true

答案 1 :(得分:10)

仅允许字符a-z大写或小写..

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

添加数字..

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

添加允许的其他字符(在本例中为感叹号)..

(附加字符前面必须带有“\”,如图所示。)

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

答案 2 :(得分:3)

preg系列函数比ereg快一点。要测试无效字符,请尝试以下操作:

if (preg_match('/[^a-z0-9.#$-]/i', $buffer)) print "Invalid characters found";

答案 3 :(得分:3)

您需要切换到使用preg而不是eregereg函数系列已被折旧,并且(因为php 5.3)使用它们会抛出一个PHP警告,并且很快就会从teh语言中删除它们。此外,有趣的是,preg函数通常比ereg更快。

至于速度,基于我在我的职业生涯中看到的经验和代码库,优化这种字符串性能在此时尚不成熟。用一些逻辑函数或方法包装比较

//pseudo code based on OP 
function isValidForMyNeeds($buffer)
{
    if (ereg("[A-Za-z0-9]\.\#\-\$", $buffer) === false)
    {
        echo "buffer only contains valid characters: a-z, A-Z, 0-9, #, -, ., $";
    }
}

然后当/如果您确定这是一个性能问题,您可以在一个地方应用任何所需的优化。

答案 4 :(得分:1)

preg_match比ereg更快,更强大:

if(preg_match('/^[^a-z0-9\.#\-\$]*$/i', $sString) > 0) //check if (doesn't contain illegal characters) is true
{
  //everything's fine: $sString does NOT contain any illegal characters
}

或转过身来:

if(preg_match('/[a-z0-9\.#\-\$]/i', $sString) === 0) //check if (contains illegal character) is false
{
  //everything's fine: $sString does NOT contain any illegal characters
}

答案 5 :(得分:1)

使用preg isntead,它更快,ereg已经停止。