用于验证电子邮件地址的正则表达式帮助

时间:2012-07-26 15:18:07

标签: php regex

我正在尝试验证电子邮件字段。我从这里的某个地方拿了这个正则表达式,我在另一个表格上使用它,它工作正常。然而,当我现在使用它时它不匹配。

我要做的就是检查电子邮件,如果它是好的,请将其记录在数据库的正确字段中。

为了不粘贴一堆东西......我已经删除了问题行并且接下来几行伪代码。

基本上,变量就是这些:

$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 }
    }
基本上,这永远不会成真。无论我做什么,电子邮件永远不会验证,正如我所说的,我写了另一个更复杂的表格,可以很好地验证数据

不确定发生了什么。

4 个答案:

答案 0 :(得分:4)

我建议你改用filter_var

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

答案 1 :(得分:0)

通过电子邮件验证,有一些简单的解决方案可以捕获99%的错误和复杂的解决方案,这些错误可能会增加十分之一,但仍然难以理解。

走简单的路线,只需检查

之类的东西
.+@.+\..+

是的,它会允许一个像a@b.c这样的电子邮件地址,但由于你的500字符正则表达式在某个地方有错,拒绝有效地址,这可能比无法注册的用户付出的代价要小。 / p>

答案 2 :(得分:0)

/^[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));
?>

虽然这个正则表达式对于像电子邮件验证这样的东西非常复杂 - 我建议在将其投入生产之前尝试对其进行优化并对其进行微调。

答案 3 :(得分:0)

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

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

进行测试访问 Regular Expression Tester