PHP:使用正则表达式验证用户输入无效


PHP: Validation of user input using regex not working

这是我第一次尝试编写PHP正则表达式。我现在被困住了,即使我在这里阅读了28.925个正则表达式线程,我也不能想出一个解决方案。如果有经验的开发人员能给我一些提示,我将非常感激。

场景:

用户要在网站(form.php)的表单中填写一个文本区域。单击提交按钮后,将调用过滤器函数,并使用regex对字符串进行验证,以过滤不需要的字符。如果失败,它应该给出一个错误并中止。

问题:

点击提交后,所有内容都被提交,即使输入是§$ %之类的东西。所以没有东西被过滤掉。我不知道为什么。

我的代码:

    <?php
    $pattern =  "/^[a-zA-Z0-9]+$/";
    function filter() {
    $val = $_POST['nameoftextarea'];
    $lines = preg_split($pattern, $val);
    for($i = 0;$i < strlen($lines); $i++) { 
    if (preg_match($pattern, $lines[$i])) {
    echo ('<p>Please delete these characters: ' . $lines[$i] . ' and try again.</p>');
        return false;
            }
    return true;
        }
    }
    ?>

有人发现任何潜在的问题吗?

似乎您忘记了在if条件中否定preg_match的!

但是,有一种更简单的方法:

function filter($str) {
    if (preg_match_all('~[^a-zA-Z0-9]~', $str, $matches)) {
        echo '<p>Please delete these characters: '
             . implode(',', array_unique($matches[0])) . ' and try again.</p>';
        return false;
    } else return true;
}
$boolres = filter ($_POST['nameoftextarea']);

注意:一个好主意是检查字段和显示警告在客户端(HTML5 regex, Javascript)和之后控制的内容在服务器端(PHP)