2014-02-21 160 views
1

我最近更新到PHP 5.3,并得到了一些不赞成的错误。preg_match()[function.preg-match]:未知的修饰符'@'

Warning: preg_match() [function.preg-match]: Unknown modifier '@' in 

首先我想提一下,我已经检查了以前的链接并尝试了建议的内容。

preg_match(): Unknown modifier '@'How can I convert ereg expressions to preg in PHP?

...但是,当我没有进行更改,从

function check_email_address($email) { 

if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) { 

function check_email_address($email) { 

if (preg_match("/^[^@]{1,64}@[^@]{1,255}$/", $email)) { 

,也试过

if (preg_match('/^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$/i', $email); 

我的注册页面不接受电子邮件,并说有无效的电子邮件。

但与此同时警告"Unknown modifier '@'"已经消失。

所以有些东西是对的,但仍然有点不对。只需要一点帮助。

任何建议或提示?

+2

请勿使用正则表达式来验证电子邮件。使用'filter_var()'函数代替:'if(filter_var($ email,FILTER_VALIDATE_EMAIL)){// valid email}' –

+0

[PHP使用preg \ _replace:“分隔符不能是字母数字或反斜杠”错误。 (http://stackoverflow.com/questions/2527657/php-using-preg-replace-delimiter-must-not-be-alphanumeric-or-backslash-error) – Toto

回答

3

您可以使用PHP的内置filter_var()

function check_email_address($email) { 
    return filter_var($email, FILTER_VALIDATE_EMAIL) ? true : false; 
} 
if(!check_email_address($_POST['email'])) 
    exit("Invalid email address"); 

或者干脆:

if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) 
    exit("Invalid email address"); 
+0

谢谢!去看看是否有效。 –

+1

工程就像一个魅力! –

+0

乐意帮忙:) – Magictallguy

2

“未知修改”的问题,当你使用preg_match是由于不使用分隔符第一次开始。 PHP中的preg_ *函数查找分隔符(通常为/)以开始和结束正则表达式。分隔符是你用作第一个字符的任何东西。在preg_match("^[^@]{1,64}@[^@]{1,255}$", $email)中,分隔符是^,所以正则表达式是前两个^之间的所有内容。这意味着第二个^之后的所有内容(包括@)都被视为修饰符。这就是为什么添加斜杠帮助。因为你在if声明留出了!

你修改后的代码拒绝的有效电子邮件:

if (!preg_match('/^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$/i', $email); 

正如其他人都指出,filter_var($email, FILTER_VALIDATE_EMAIL)一个更简单,更不易出错的方式来过滤电子邮件地址,不管怎样。

+0

现在就试试看。谢谢! –

+0

小修正:'ereg()'不使用分隔符,但是由于它不推荐使用而在意吗? – HamZa

+1

@HamZa好点。发布的OP错误来自使用preg_match,但我忘了修复那些我复制并粘贴的OP代码。 –

相关问题