2013-10-01 236 views
1

我正在使用PHP eregi函数,但我收到它已被弃用的通知。这里是我的代码:使用preg_match函数的PHP错误

!eregi("^[A-Z0-9._%-][email protected][A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email'])) 

所以我想替换为的preg_match的功能,但目前看来,我无法得到的的preg_match正确的模式,因为我得到的错误与下面的代码:

!preg_match("^[A-Z0-9._%-][email protected][A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email'])) 

这是我从上面的代码中出现错误:

Warning: preg_match(): No ending delimiter '^' found in 

感谢您的帮助。

+0

把/在正则表达式的开始和结束 –

+0

你需要使用一个特殊的字符,如:〜(\ w +)〜和flags go here来包含正则表达式代码。 –

+0

这绝对不是引用问题的重复。这是关于更新PHP和preg_match替换eregi。 –

回答

2

您需要界定您的正则表达式:

preg_match("/^[A-Z0-9._%-][email protected][A-Z0-9._%-]+\.[A-Z]{2,4}$/", 
      ^          ^
1

试试吧,

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

必须使用分隔符/

2

preg_match()希望你在正则表达式字符串的开头或结尾使用分隔符:

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

分隔符可以是几个字符,包括~%#/,@等等。请注意,当您选择分隔符时,如果该字符在正则表达式中使用,则必须使用反斜杠字符(\)进行转义。例如,使用正则表达式

http://[0-9a-z]+\.com 

与分隔符/的组合,会要求你逃跑的/每一次出现:

/http:\/\/[0-9a-z]+\.com/ 

更多信息,请参见PHP manual