【问题标题】:How do I reject entries with invalid characters using preg_match and filter_var?如何使用 preg_match 和 filter_var 拒绝包含无效字符的条目?
【发布时间】:2017-09-02 22:39:07
【问题描述】:

我正在尝试使用 preg_match 和 filter_var 来检查表单条目。我创建了两个函数,当字段包含无效字符时它们应该返回 false。对于用户名,无效字符是数字和符号。我的功能有什么问题?

用户名功能:

function verifyUsername($x){
    if (!preg_match('/[^a-z\s-]/i',$x)) {
        return 0;

    }
    else {
        return 1;
    }
}

电子邮件地址功能:

function verifyEmailAdd($x){
    if (!filter_var($emailadd, FILTER_VALIDATE_EMAIL)) {
        return 0;

    }
    else {
        return 1;
    }
}

我这样称呼他们:

goodemail = verifyEmailAdd($emailAdd);
gooduser = verifyUsername($userName);

他们总是返回 1。

【问题讨论】:

    标签: php validation preg-match


    【解决方案1】:

    在 verifyEmailAdd 函数中,你有:

    if (!filter_var($emailadd...
    

    但是在函数声明中你有 $x,所以 $emailadd 在这个范围内是未定义的。

    如果您启用了 error_reporting,您会注意到这一点 - 请参阅 https://stackoverflow.com/a/5438125/4568686

    第二件事 - 在 verifyUsername 函数中,我不确定你的正则表达式是什么意思,如果你只想接受字母字符,[^a-z] 应该足够了。

    好吧,你来修改一下:

    <?php
    
    function verifyUsername($x){
        if (preg_match('/[^a-z]/i',$x)) {
            return 0;
        }
        else {
            return 1;
        }
    }
    
    function verifyEmailAdd($x){
        if (!filter_var($x, FILTER_VALIDATE_EMAIL)) {
            return 0;
    
        }
        else {
            return 1;
        }
    }
    
    var_dump(verifyUsername("45wqadf"));
    var_dump(verifyUsername("wqadf"));
    var_dump(verifyEmailAdd("45wqadf@&%"));
    var_dump(verifyEmailAdd("wqadf@blah.com"));
    

    你可以在这里测试:https://3v4l.org/kVDiK

    【讨论】:

      猜你喜欢
      • 2015-05-28
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 2020-05-10
      • 2017-03-25
      • 2017-11-16
      • 2014-05-01
      • 2017-05-20
      相关资源
      最近更新 更多