如果不是数字,Yii2将字段验证为电子邮件

时间:2016-03-09 15:23:43

标签: php validation yii2

我的项目中有这个课程:

<?php

namespace app\models;

use Yii;
use yii\base\Model;

class Contact extends Model
{

    public $fullname;
    public $info;

    public function rules()
    {
        return [
            ['fullname','info'],'required'
        ];
    }

}

我想在我的联系人&#39;上进行自定义验证。领域。如果字段上的值不是数字,我想将其验证为邮件。

是否有使用条件验证器的方法? 提前感谢所有帮助

2 个答案:

答案 0 :(得分:2)

你可以做各种事情来完成这个自定义验证器,在beforeValidate()中使用输入等。就个人而言,最好的方法是设置方案。在您的控制器中,在验证模型之前检查用户输入是否为数字(is_numeric()),如果将场景设置为&#39; something1&#39;如果没有,则将场景设置为“邮件”。这样您就不必担心验证,因为您将为具有不同方案的同一属性设置两个规则。一个规则是电子邮件,其他可以是integerOnly或类似的东西。希望它有所帮助。

答案 1 :(得分:1)

您可以定义内联函数来验证规则中的字段。在你的情况下,我想你可能会做类似的事情:

<div class="container">
    <div class="form-group">
        <label for="firstNameInput">Firstname:</label>
        <input type="text" class="form-control" id="firstNameInput" name="firstNameInput">

        <label for="lastNameInput">Lastname:</label>
        <input type="text" class="form-control" id="lastNameInput" name="lastNameInput">            
    </div>

    <button class="btn btn-info" onclick="showName()">Submit</button>
    <p id="demo"></p>
</div>

<script type="text/javascript">
    var person = {
        firstNameElement: document.getElementById('firstNameInput'),
        lastNameElement: document.getElementById('lastNameInput'),
        fullName: function () {
            return this.firstNameElement.value + ", " + this.lastNameElement.value;
        }
    };

    function showName() {
        document.getElementById('demo').innerHTML = person.fullName();
    };
</script>

更多信息:

1)http://www.yiiframework.com/doc-2.0/guide-input-validation.html

2)http://www.yiiframework.com/doc-2.0/guide-input-validation.html#using-client-side-validation