2012-02-09 28 views
1

我试着环顾四周,以为我想通了,通过使用preg_match,但预浸比赛给我的错误:如何更换eregi()

警告:的preg_match():没有结束符“^”

这里是我的原代码的PHP说折旧:

if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $_POST['email'])) { 
    $erroR= "Invalid Email address"; 
} 

有人可以解释什么结束符“^”是,如何添加它。谢谢@

+0

你的正则表达式不匹配,许多有效的电子邮件地址,即。 '我的+地址@ domain.museum',域名也可以保存像'àéü'这样的突出字符...... – Toto 2012-02-09 11:03:35

+0

即时通讯并不是很好,但我已经注意到最后的{2,3}。我不知道该怎么做。你有什么建议吗? – 2012-02-10 16:05:44

+2

至少用“{2,6}”替换。但使用正则表达式验证电子邮件是一件非常困难的事情。看看http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html – Toto 2012-02-10 16:14:56

回答

2

交换eregi()preg_match(),并添加到正则表达式的分隔符。我在这里选择了标准/,但您可以使用其他字符。

if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $_POST['email'])) { 
    $erroR= "Invalid Email address"; 
} 

你收到此警告的原因...

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

...是因为preg_match()预计分隔符,并且假设正在使用的^,并且它不能匹配一个尾随。

+0

这样做,谢谢。我甚至没有意识到正则表达式不在斜杠内。 – 2012-02-09 02:46:11

+2

请注意'preg_match()'和'ereg()'是区分大小写的,并且没有像'eregi()'这样的不区分大小写的变体。相反,你必须指定适当的模式修饰符。最常见的做法是在尾部分隔符后面添加'i':''/ xyz/i'' – 2012-02-09 04:10:29

1

在表达式前后添加/ - 您需要使用preg_replace的分隔符来告诉它正则表达式开始和结束的位置。它可以是:

A delimiter can be any non-alphanumeric, non-backslash, non-whitespace character. 
Often used delimiters are forward slashes (/), hash signs (#) and tildes (~). 

那么这将工作:

"/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/"