regex帮助验证电子邮件地址


regex assistance for validating an email address

我正在尝试验证一个电子邮件字段。我从这里的某个地方获得了这个正则表达式,并在我制作的另一个表单上使用了它,它运行良好。然而,当我现在使用它时,它并不匹配。

我所要做的就是检查电子邮件,如果它很好,那么将其记录在数据库的适当字段中。

为了不粘贴一堆东西。。。我已经去掉了问题行,并将伪代码接下来的几行。

从本质上讲,vars是这样的:

$theEmail = $_post email from first page here
$regEx ='#^[a-z0-9.!'#$%&''*+-/=?^_`{|}~]+@([0-9.]+|([^'s]+'.+[a-z]{2,6}))$#si';

我的php就是这个

//essentially other field validation will go here...for now testing only empty.
    if(!empty($theEmail)){
        if (preg_match($regEx, $formEmail)) {
            //send it through to db.
        } else { //error stuff here }
    }

本质上,这永远不会实现。无论我做什么,电子邮件都不会验证,正如我所说,我写了另一个更复杂的表单,可以很好地验证数据

不确定发生了什么。

我建议您改用filter_var

if (filter_var($theEmail, FILTER_VALIDATE_EMAIL)) {
  //send it through to db.
} else {
  //error stuff here
}

/^[a-z0-9.!'#$%&''*+-=?^_{|}~]+@([0-9.]+|([^'s]+'.+[a-z]{2,6}))$/

我删除了第一个#和结束的#si,并从=中删除了/,因为它给我带来了问题。这会在我的电子邮件地址上生成一个匹配项:

<?
$theEmail = 'me@davebel.com';
$regEx ='/^[a-z0-9.!'#$%&''*+-=?^_`{|}~]+@([0-9.]+|([^'s]+'.+[a-z]{2,6}))$/';
print_r(preg_match($regEx, $theEmail));
?>

尽管这个正则表达式对于电子邮件验证之类的东西来说非常复杂,但我建议在将其投入生产之前尝试对其进行细化和微调。

通过电子邮件验证,有一些简单的解决方案可以捕获99%的错误,而复杂的解决方案可能会捕获十分之一以上的错误,但无法读取。

走简单的路线,只需检查之类的东西

.+@.+'..+

是的,它将允许使用像a@b.c这样的电子邮件地址,但这可能比无法注册的用户付出的代价要小,因为您的500个字符的正则表达式中有一个错误,拒绝了一个有效的地址。

试试吧!希望它能解决您的查询,尽管电子邮件有中篇正则表达式

^[a-z0-9,!#'$%&''*'+/='?'^_`'{'|}~-]+('.[a-z0-9,!#'$%&''*'+/='?'^_`'{'|}~-]+)*@[a-z0-9-]+('.[a-z0-9-]+)*'.([a-z]{2,})$

测试访问正则表达式测试程序