正则表达式使用分隔符验证项目

时间:2013-01-14 21:17:01

标签: php regex

我正在使用此正则表达式在php中进行电子邮件验证(基于here

^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$;

我的问题是如何验证输入是由分隔符分隔的电子邮件列表。 我们说分隔符是“,”或“;”或“,”或“;”。

我想我应该添加类似的东西

(\s*(;|,)\s*|\s*$)

但它不起作用......

3 个答案:

答案 0 :(得分:3)

通过模块验证电子邮件是真实的,而不是短的正则表达式。见http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html

但幸运的是,php有一个验证器:

<?php
$email_a = 'joe@example.com';
$email_b = 'bogus';

if (filter_var($email_a, FILTER_VALIDATE_EMAIL)) {
    echo "This (email_a) email address is considered valid.";
}
if (filter_var($email_b, FILTER_VALIDATE_EMAIL)) {
    echo "This (email_b) email address is considered valid.";
}
?>

请参阅http://php.net/manual/en/filter.examples.validation.php

答案 1 :(得分:1)

不要使用正则表达式验证电子邮件,PHP有一个函数filter_var()

$email = 'joe@example.com';
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
  //valid
}else{
  //not
}

您可以调整此代码并使用explode(',',$email)验证多封电子邮件。

答案 2 :(得分:0)

如果您只接受纯正则表达式解决方案,则有可能无法使用答案,出于某些原因,我建议您使用explode和分隔符并继续迭代数组并依次验证每封电子邮件:

  1. 您的正则表达式和处理它的代码将被简化。

  2. 您的正则表达式只需要处理电子邮件的一般用例,并且只要您需要验证电子邮件地址,就可以进行常规的可重复使用操作。将regexp操作交换出来用于调用用于电子邮件验证的库或任何其他自定义验证器也很简单。

  3. 处理可能的相关必需品会更容易,例如在输出中指出哪些电子邮件无法验证,或者接受所有验证和丢弃那些未验证的地址。