【问题标题】:ZF2 form validation not working properly for emailZF2 表单验证不适用于电子邮件
【发布时间】:2023-03-15 21:52:01
【问题描述】:

我有一个 type="email" 的输入框并使用 zend 验证器对其进行验证

<input type="email" name="email" > email </input>
'email' => array(
                'required' => true,
                'validators' => array(

                    array(
                        'name' => 'Regex',
                        'options' => array(
                            'pattern'=>'/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/', 
                            'messages' => array(
                                \Zend\Validator\Regex::NOT_MATCH=>'Please fill correct email ',
                            )
                        ),
                        'break_chain_on_failure' => true
                    ),

                ),

问题是如果我使用另一个数组来检查

IS_EMPTY

zend 正则表达式再次不显示上述错误,而是显示默认的 zend 正则表达式错误,如果我删除 IS_EMPTY 那么它工作正常。正则表达式错误是

 1. input does not match to expression '/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/'

完全无法理解为什么在没有空检查的情况下它可以正常工作并且不能与它一起工作

【问题讨论】:

  • 为什么不直接使用 ZF2 自带的 EmailAddress() Validator?
  • 试过了,即使它仍然会给出默认的 REGEX 错误:输入与表达式不匹配..

标签: regex zend-framework2


【解决方案1】:

不需要使用notEmpty,只需将该字段设置为“必填”并指定错误信息即可:

    $this->add(array(
        'name' => 'email',
        'required' => true,
        'error_message' => 'Please entry e-mail.',
        'validators' => array(
            array(
                'name' => 'EmailAddress',
                'options' => array (
                    'messages' => array(EmailAddress::INVALID => 'Please specify a valid e-mail.'),
                ),
                'break_chain_on_failure' => true,
            ),
        ),
    ));

【讨论】:

    【解决方案2】:

    我也有同样的困境,总是出现这个“输入与表达式不匹配”​​而不是 EmailAddress::INVALID_FORMAT 的消息。但是我发现您发布的代码修复了我遇到的相同错误。这是我的代码。

    'validators' => array(
                array (
                    'name' => 'Regex',
                    'options' => array(
                        'pattern'=>'/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/',
                        'messages' => array(
                            Regex::NOT_MATCH    => 'Please provide a valid email address.',
                        ),
                    ),
                    'break_chain_on_failure' => true
                ),
                array(
                    'name' => 'EmailAddress',
                    'options' => array(
                        'messages' => array(
                            EmailAddress::INVALID_FORMAT   => 'Please provide a valid email address.',
                            EmailAddress::DOT_ATOM         => '',
                            EmailAddress::INVALID_FORMAT   => '',
                            EmailAddress::INVALID_LOCAL_PART => '',
                            EmailAddress::QUOTED_STRING => '',
                        )
                    ),
                ),
            ),
    

    【讨论】:

    • 那很好,它对你有用..!!但你试过 IS_EMPTY ..??因为这段代码的问题是空检查..!!
    猜你喜欢
    • 2015-09-21
    • 2016-01-15
    • 2018-12-13
    • 1970-01-01
    • 2017-06-20
    • 2015-02-24
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多