如何使用preg_match和filter_var拒绝包含无效字符的条目?

时间:2017-09-02 22:39:08

标签: php validation preg-match

我正在尝试使用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.

1 个答案:

答案 0 :(得分:0)

在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