我正在尝试验证电子邮件字段。我从这里的某个地方拿了这个正则表达式,我在另一个表格上使用它,它工作正常。然而,当我现在使用它时它不匹配。
我要做的就是检查电子邮件,如果它是好的,请将其记录在数据库的正确字段中。
为了不粘贴一堆东西......我已经删除了问题行并且接下来几行伪代码。
基本上,变量就是这些:
$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 }
}
基本上,这永远不会成真。无论我做什么,电子邮件永远不会验证,正如我所说的,我写了另一个更复杂的表格,可以很好地验证数据
不确定发生了什么。
答案 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