【问题标题】:PHP: Validation of user input using regex not workingPHP:使用正则表达式验证用户输入不起作用
【发布时间】:2014-03-12 10:02:44
【问题描述】:

这是我第一次尝试编写 php 正则表达式。我现在被困住了,即使我在这里阅读了 28.925 个正则表达式线程的感觉,我也无法提出解决方案。我非常感谢经验丰富的开发人员提供的一些提示。

场景:

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

问题:

点击提交后,所有内容都会提交,即使输入类似于 § $ %。所以没有任何东西被过滤。我不知道为什么。

我的代码:

    <?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;
        }
    }
    ?>

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

【问题讨论】:

  • 注意:$lines 是数组,你检查数组的strlen。

标签: php regex forms


【解决方案1】:

您似乎忘记了 ! 来否定 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 正则表达式、Javascript)检查字段并显示警告,然后在服务器端(PHP)控制内容

【讨论】:

    猜你喜欢
    • 2016-02-26
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    相关资源
    最近更新 更多