Php 如何在自定义验证功能中使用电子邮件验证?

Php 如何在自定义验证功能中使用电子邮件验证?,php,yii2,Php,Yii2,我已经创建了一个自定义验证函数。现在我想验证该功能中的电子邮件,我如何才能做到这一点? 下面是我的代码: public function rules() { return [ ['email', 'filter', 'filter' => 'trim'], ['email', 'required'], ['email', 'validateEmail'], ]; } public function validateEmail

我已经创建了一个自定义验证函数。现在我想验证该功能中的电子邮件,我如何才能做到这一点? 下面是我的代码:

public function rules()
{
    return [
        ['email', 'filter', 'filter' => 'trim'],
        ['email', 'required'],
        ['email', 'validateEmail'],
    ];
}

public function validateEmail($attribute, $params) {
    if(ctype_digit($this->email)){
        if(strlen($this->email)!=10)
            $this->addError($attribute,'Phone number should be of 10 digits');
    else{// Email validation using emailvalidator.}
    }

}
你可以直接打电话给警察局。
消息是使用时将添加到模型中的错误消息。如果要使用默认错误消息,可以将其忽略:

public function validateEmail($attribute, $params) {
    ...
    else {
        $emailValidator = new \yii\validators\EmailValidator();
        $emailValidator->message = "Invalid Email";
        $emailValidator->validateAttribute($this, $attribute));
    }
}
你可以直接打电话给警察局。
消息是使用时将添加到模型中的错误消息。如果要使用默认错误消息,可以将其忽略:

public function validateEmail($attribute, $params) {
    ...
    else {
        $emailValidator = new \yii\validators\EmailValidator();
        $emailValidator->message = "Invalid Email";
        $emailValidator->validateAttribute($this, $attribute));
    }
}

您可以使用
email
validator。是的,但我想在自定义验证函数中使用它,正如您在else语句中看到的那样。我希望为电子邮件或其他电话号码验证相同的电子邮件字段。电子邮件验证表达式
'/^[A-z0-9_ \-]+[@][A-z0-9_ \-]+([.][A-z0-9_ \-]+[A-z.]{2,4}$/
谢谢,这可能会有所帮助。:)您可以使用
email
validator。是的,但我想在自定义验证函数中使用它,正如您在else语句中看到的那样。我希望为电子邮件或其他电话号码验证相同的电子邮件字段。电子邮件验证表达式
'/^[A-z0-9_ \-]+[@][A-z0-9_ \-]+([.][A-z0-9_ \-]+[A-z.]{2,4}$/
谢谢,这可能会有所帮助。:)我也试过同样的方法,但是你猜怎么着,无论我选择什么样的电子邮件,它都会出现在if语句中。比如:else{if(!$validator->validate($attribute,$params))$this->addError($attribute,'Invalid email!');}Result:“Invalid email”总是无效的。另外,我想你传递参数的方式是错误的,应该是:if(!$emailValidator->validateAttribute($attribute,$params))嗯。建议
($model,$attribute)
作为参数。如果我按照您建议的方式传递值,
($model,$attribute)
,它给了我一个错误:
PHP可恢复错误–类frontend\models\PasswordResetRequestForm的yii\base\ErrorException对象无法转换为字符串
,当我这样做时:
($attribute,$params)
即使电子邮件的格式正确,它也总是在验证字符串。我尝试了同样的方法,但猜猜看,无论我选择哪封电子邮件,它总是输入if语句。比如:else{if(!$validator->validate($attribute,$params))$this->addError($attribute,'Invalid email!'}结果:“无效的电子邮件”总是。另外,我猜您传递参数的方式是错误的,应该是:if(!$emailValidator->validateAttribute($attribute,$params))Hmm。建议将
($model,$attribute)
作为参数。如果我按照您建议的方式传递值($model,$attribute)
,它给了我一个错误:
PHP可恢复错误–yii\base\ErrorException类frontend\models\PasswordResetRequestForm的对象无法转换为字符串
,当我这样做时:
($attribute,$params)
即使电子邮件的格式正确,它也总是在验证字符串。