我正在使用一个函数来读取特定的查询字符串变量并删除它们不需要的字符,
问题是,当我尝试使用'[^ -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);
答案 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