ankush madaan
ankush madaan

Reputation: 300

ZF2 form validation not working properly for email

i have a input box with type="email" and validation it with zend validator

<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
                    ),

                ),

problem is if i use another array to check for

IS_EMPTY

zend regex again does not display the above error instead display default zend regex error and if i remove IS_EMPTY then it works fine. regex error is

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

EXACTLY NOT ABLE TO UNDERSTAND WHY THIS WORKS FINE WITHOUT EMPTY CHECK AND DOESN'T WORK ALONG WITH IT

Upvotes: 2

Views: 1477

Answers (2)

You don't need to use notEmpty, you only need to set the field as "required" and specify the error message:

    $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,
            ),
        ),
    ));

Upvotes: 2

Alecka Fajardo
Alecka Fajardo

Reputation: 11

I have also the same dilemma where this "input does not match to expression" always appears instead of the message for EmailAddress::INVALID_FORMAT. But I found that the code you posted fixed the same error I had. This is my code.

'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 => '',
                    )
                ),
            ),
        ),

Upvotes: 0

Related Questions