1

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

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

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

本质上,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 }
    }

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

不知道发生了什么。

4

4 回答 4

4

我建议你filter_var改用。

if (filter_var($theEmail, FILTER_VALIDATE_EMAIL)) {
  //send it through to db.
} else {
  //error stuff here
}
于 2012-07-26T15:31:32.870 回答
0

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

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

要进行测试,请访问 正则表达式测试器

于 2012-07-26T15:30:58.990 回答
0

通过电子邮件验证,有一些简单的解决方案可以捕捉 99% 的所有错误,而复杂的解决方案可能会捕捉到 0.1% 的错误,但难以阅读。

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

.+@.+\..+

是的,它允许使用类似的电子邮件地址,a@b.c但这可能比无法注册的用户支付的价格更低,因为您的 500 个字符的正则表达式在某处有错误,拒绝有效地址。

于 2012-07-26T15:23:57.687 回答
0

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

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

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

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

于 2012-07-26T15:25:41.993 回答