preg_match删除禁止的字符?

时间:2012-08-09 12:52:45

标签: php regex preg-match

我正在尝试从字符串中删除禁止的字符。

$forbidden = array( "<", ">", "{", "}", "[", "]", "(", ")", "select", "update", "delete", "insert", "drop", "concat", "script");
foreach ($forbidden as $forbidChar) {
    if (preg_match("/$forbidChar/i", $string)) {
        return TRUE;
    }
    return FALSE;
}

但它没有按预期工作,我哪里出错?

4 个答案:

答案 0 :(得分:2)

如果您想要替换字符,则需要使用preg_replace() preg_match()

您可能还希望确保使用preg_quote()正确转义您的禁用字符。

答案 1 :(得分:2)

您可以使用以下单个正则表达式执行此操作:

$forbidden = array(
            "<", ">", "{", "}", "[", "]", "(", ")",
            "select", "update", "delete", "insert", "drop", "concat", "script");
$forbidden = array_map( 'preg_quote', $forbidden, array_fill( 0, count( $forbidden), '/'));
return (bool) preg_match( '/' . implode( '|', $forbidden) . '/', $string);

这正确地使用preg_quote()转义所有字符,并形成一个正则表达式来测试所有情况。

注意:我没有测试过,但它应该可以工作。

答案 2 :(得分:2)

您需要转义字符"[", "]", "(", ")" with "\[", "\]", "\)", "\)"

这是工作代码,

<?php 
$string = "dfds fdsf dsfs fkldsk  select dsasd asdasd";
$forbidden = array(
            "<", ">", "{", "}", "\[", "\]", "\(", "\)",
            "select", "update", "delete", "insert", "drop", "concat", "script");
   foreach ($forbidden as $forbidChar) {
        if (preg_match("/$forbidChar/i", $string)) {
            exit('Forbidden char dtected');
            return TRUE;
        }
        return FALSE;
    }
?>

答案 3 :(得分:1)

您可以使用performanter string_replace函数执行此操作

<?php
   $forbidden = array(
        "<", ">", "{", "}", "[", "]", "(", ")",
        "select", "update", "delete", "insert", "drop", "concat", "script");

    $cleanString = str_ireplace($forbidden, "", $string);
?>