1

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

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

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

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

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

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

4

3 回答 3

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

于 2013-01-14T21:26:51.337 回答
1

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

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

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

于 2013-01-14T21:27:45.097 回答
0

如果您只接受纯正则表达式解决方案,则可能会给您无法使用的答案,出于以下几个原因,我建议您使用带分隔符的爆炸并继续遍历数组并依次验证每封电子邮件:

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

  2. 您的正则表达式只需要处理电子邮件的一般用例,并且可以在您需要验证电子邮件地址的任何时候成为一般可重复使用的操作。将正则表达式操作换成调用用于电子邮件验证的库或任何其他自定义验证器也很简单。

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

于 2013-01-14T21:26:43.947 回答