我正在尝试验证一个电子邮件字段。我从这里的某个地方获得了这个正则表达式,并在我制作的另一个表单上使用了它,它运行良好。然而,当我现在使用它时,它并不匹配。
我所要做的就是检查电子邮件,如果它很好,那么将其记录在数据库的适当字段中。
为了不粘贴一堆东西。。。我已经去掉了问题行,并将伪代码接下来的几行。
从本质上讲,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,})$
测试访问正则表达式测试程序