PHP:检查无效字符的最快方法(除了a-z、A-Z、0-9、#、-、.、$之外)是什么?

12

我需要尽可能快地检查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, #, -, ., $";
}

4
ereg 已经过时了,请使用 preg_ 函数代替。 - Ben James
6个回答

38

尝试使用这个函数:

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

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


12

仅允许使用小写或大写字母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!";
}

3
您需要开始使用preg而不是eregereg函数族已被弃用,自php 5.3以来使用它们会引发PHP警告,并且它们很快将从语言中删除。 此外,传闻称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, #, -, ., $";
    }
}

如果您确定这是一个性能问题,那么您可以在一个地方应用任何必要的优化。


3

preg系列函数比ereg快得多。要测试无效字符,请尝试以下内容:

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

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
}

1
使用 preg 替代 ereg,因为 preg 更快,并且 ereg 已经停用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接