将preg_replace正则表达式传递给函数

时间:2011-03-09 20:44:57

标签: php regex

我正在使用一个函数来读取特定的查询字符串变量并删除它们不需要的字符,

问题是,当我尝试使用'[^ -a-zA-Z0-9]'的传入正则表达式类时,该函数不会删除任何东西......但是如果我硬编码相同的正则表达式函数,它工作得很好。

有什么想法吗?将所需的正则表达式类传递给函数是否存在固有的“坏处”?

这是功能:

function CleanURLVariable($variablename,$defaultvalue,$allowedcharclass,$lowercase) {

    if (isset($_GET[$variablename])) {
            $temp = preg_replace('/'.$allowedcharclass.'/i','',urldecode(trim($_GET[$variablename])));

            if ($lowercase) {
                $value = strtolower($temp); 
            } else {
                $value = $temp;
            }
            return $value ;
        } else {
            return $defaultvalue;
        }
} // end of function CleanURLVariable

这样称呼:

$myCleanedVariable = CleanURLVariable('kw',false,'[^ -a-zA-Z0-9]',false);

1 个答案:

答案 0 :(得分:1)

你的正则表达式是错误的,你需要将连字符放在开头:

[^- a-zA-Z0-9]

否则php正在尝试为创建范围a(空格)。

$str = "sads#$!^!#adsd#gf\$dsgf";

echo preg_replace('/[^ -a-zA-Z0-9]/i','', $str) . PHP_EOL;
echo preg_replace('/[^- a-zA-Z0-9]/i','', $str) . PHP_EOL;

打印:

  

SADS#$!^!#ADSD#$ GF dsgf

     

sadsadsdgfdsgf