如何替换eregi()

时间:2012-02-09 02:43:30

标签: php regex preg-match

我试着环顾四周,并认为我使用preg_match计算出来,但是preg match给了我错误:

警告: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"; 
} 

有人可以解释结尾分隔符'^'是什么,以及如何添加它。感谢@

2 个答案:

答案 0 :(得分: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"; 
} 

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

  

警告:preg_match():无结尾分隔符'^'

...是因为preg_match()期望分隔符,并且它假设正在使用^,并且它与尾随符号不匹配。

答案 1 :(得分: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})$/"