Zend 中的正则表达式电子邮件验证
Regex email vaildation in Zend
我正在使用 zend 框架的电子邮件验证,当我将电子邮件地址作为 abcde@gester.tech 时,它以无效验证响应。然后我修改验证如下。
$emailValidator= new Validator\EmailAddress(Validator\Hostname::ALLOW_DNS | Validator\Hostname::ALLOW_LOCAL);
$emailRegex= new Validator\Regex(
array(
'pattern' => '/^(?:(?:[^<>()\[\]\.,;:\s@"]+(?:\.[^<>()\[\]\.,;:\s@"]+)*)|(?:".+"))@(?:(?:\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(?:(?:[a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/',
'messages'=>array(
'regexNotMatch'=>'Make sure your email pattern is correct'
)
)
);
$emailInp->getValidatorChain()->addValidator($emailValidator)->addValidator($emailRegex);
现在我可以传递电子邮件地址 (abcde@gester.tech) 而不会出现验证错误。但是,如果我将输入作为 abcde@gester 提供,它也将作为有效输入。但我想限制它,我认为这可以通过将正则表达式添加到此验证来实现。我可以知道如何实现吗?
$emailValidator= new Validator\EmailAddress(
Validator\Hostname::ALLOW_DNS |
Validator\Hostname::ALLOW_LOCAL);
$emailRegex= Validator\Regex(array('pattern' => '/^(?:(?:[^<>()\[\]\.,;:\s@"]+(?:\.[^<>()\[\]\.,;:\s@"]+)*)|(?:".+"))@(?:(?:\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(?:(?:[a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/'));
$emailInp->getValidatorChain()->addValidator($emailValidator->addValidator($emailRegex));
Zend 框架中有一个 Regex Validator 支持,它有助于匹配用户定义的正则表达式模式。有一个 pattern 选项,它为给定的验证器设置正则表达式模式。
您可以使用它来匹配用户定义的验证器,即适合您需要的模式。
语法:
$validator = new Zend\Validator\Regex(array('pattern' => '/your_desired_regex_pattern_here/'));
为了匹配适合您需要的有效电子邮件地址,您可以使用可用的电子邮件地址正则表达式验证器填写模式。同样根据 Zend docs;正则表达式验证器使用 PCRE(php) 语法,因此您可以使用 PCRE 正则表达式风格。
示例:
$validator = new Zend\Validator\Regex(array('pattern' => '/^(?:(?:[^<>()\[\]\.,;:\s@"]+(?:\.[^<>()\[\]\.,;:\s@"]+)*)|(?:".+"))@(?:(?:\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(?:(?:[a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/'));
$validator->isValid("abcde@gester.tech"); // returns true
$validator->isValid("abcde@gester"); // returns false
$validator->isValid("Someemail@someDomain.com"); // returns true
如果您想在单个输入数据上链接多个验证器,您还可以使用以下语法:
$validatorChain = new Zend_Validate();
$validatorChain->addValidator(
new Zend\Validator\Regex(array('pattern' => '/^(?:(?:[^<>()\[\]\.,;:\s@"]+(?:\.[^<>()\[\]\.,;:\s@"]+)*)|(?:".+"))@(?:(?:\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(?:(?:[a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/'))
->addValidator(new Zend_Validate_Alnum()); // Second validator...You can chain multiple
if ($validatorChain->isValid($input_email)) {
// email passed validation
} else {
// email failed validation; print reasons
foreach ($validatorChain->getMessages() as $message) {
echo "$message\n";
}
}
你可以在here.
中找到上述正则表达式的演示
参考:验证电子邮件地址的正则表达式取自this答案。
我正在使用 zend 框架的电子邮件验证,当我将电子邮件地址作为 abcde@gester.tech 时,它以无效验证响应。然后我修改验证如下。
$emailValidator= new Validator\EmailAddress(Validator\Hostname::ALLOW_DNS | Validator\Hostname::ALLOW_LOCAL);
$emailRegex= new Validator\Regex(
array(
'pattern' => '/^(?:(?:[^<>()\[\]\.,;:\s@"]+(?:\.[^<>()\[\]\.,;:\s@"]+)*)|(?:".+"))@(?:(?:\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(?:(?:[a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/',
'messages'=>array(
'regexNotMatch'=>'Make sure your email pattern is correct'
)
)
);
$emailInp->getValidatorChain()->addValidator($emailValidator)->addValidator($emailRegex);
现在我可以传递电子邮件地址 (abcde@gester.tech) 而不会出现验证错误。但是,如果我将输入作为 abcde@gester 提供,它也将作为有效输入。但我想限制它,我认为这可以通过将正则表达式添加到此验证来实现。我可以知道如何实现吗?
$emailValidator= new Validator\EmailAddress(
Validator\Hostname::ALLOW_DNS |
Validator\Hostname::ALLOW_LOCAL);
$emailRegex= Validator\Regex(array('pattern' => '/^(?:(?:[^<>()\[\]\.,;:\s@"]+(?:\.[^<>()\[\]\.,;:\s@"]+)*)|(?:".+"))@(?:(?:\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(?:(?:[a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/'));
$emailInp->getValidatorChain()->addValidator($emailValidator->addValidator($emailRegex));
Zend 框架中有一个 Regex Validator 支持,它有助于匹配用户定义的正则表达式模式。有一个 pattern 选项,它为给定的验证器设置正则表达式模式。
您可以使用它来匹配用户定义的验证器,即适合您需要的模式。
语法:
$validator = new Zend\Validator\Regex(array('pattern' => '/your_desired_regex_pattern_here/'));
为了匹配适合您需要的有效电子邮件地址,您可以使用可用的电子邮件地址正则表达式验证器填写模式。同样根据 Zend docs;正则表达式验证器使用 PCRE(php) 语法,因此您可以使用 PCRE 正则表达式风格。
示例:
$validator = new Zend\Validator\Regex(array('pattern' => '/^(?:(?:[^<>()\[\]\.,;:\s@"]+(?:\.[^<>()\[\]\.,;:\s@"]+)*)|(?:".+"))@(?:(?:\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(?:(?:[a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/'));
$validator->isValid("abcde@gester.tech"); // returns true
$validator->isValid("abcde@gester"); // returns false
$validator->isValid("Someemail@someDomain.com"); // returns true
如果您想在单个输入数据上链接多个验证器,您还可以使用以下语法:
$validatorChain = new Zend_Validate();
$validatorChain->addValidator(
new Zend\Validator\Regex(array('pattern' => '/^(?:(?:[^<>()\[\]\.,;:\s@"]+(?:\.[^<>()\[\]\.,;:\s@"]+)*)|(?:".+"))@(?:(?:\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(?:(?:[a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/'))
->addValidator(new Zend_Validate_Alnum()); // Second validator...You can chain multiple
if ($validatorChain->isValid($input_email)) {
// email passed validation
} else {
// email failed validation; print reasons
foreach ($validatorChain->getMessages() as $message) {
echo "$message\n";
}
}
你可以在here.
中找到上述正则表达式的演示参考:验证电子邮件地址的正则表达式取自this答案。