警告:preg_match()[function.preg-match]:未知的修饰符'@'

时间:2011-05-30 17:50:03

标签: php

我不确定在这种情况下我需要做什么,因为我已经尝试了几种方法来解决这个问题。

if(!preg_match("/^[a-z0-9]+([_\\.-][a-z0-9]+)^/" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$email ))
{
    $response="You entered an invalid e-mail.";
    $form_success   = FALSE;
}

3 个答案:

答案 0 :(得分:2)

PHP将"/^[a-z0-9]+([_\\.-][a-z0-9]+)^/"视为整个表达式(/被视为delimiter)。之后的任何内容都将被视为修饰符。 @ is not a valid modifier

也许你想要逃避最后一个斜线\/但是你最后错过了一个$/。为什么在这里使用字符串连接?整个正则表达式似乎与电子邮件地址不匹配。

无论如何,learn regular expressions before you use them。在这种情况下,最好使用PHP的filter_var

if (filter_var($email_a, FILTER_VALIDATE_EMAIL)) {
    echo "This (email_a) email address is considered valid.";
}

答案 1 :(得分:0)

这个正则表达式非常混乱。请改用:

/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/

你自己写过这个表达吗?我建议你在这里阅读正则表达式:

http://www.regular-expressions.info/

你的正则表达式无法正常工作的原因是因为你期望字符串串联做某事,而事实并非如此。你所拥有的字符串等于:

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

这有很多问题。

  1. 字符串
  2. 中有几个(未转义的)正斜杠(/
  3. 字符串末尾没有正斜杠
  4. 我不确定这是否真的与电子邮件匹配,我必须对其进行测试。
  5. 你得到的错误是因为它认为第二个未转义的正斜杠标志着表达式的结束。所以......

    /^[a-z0-9]+([_\\.-][a-z0-9]+)^/
    

    它有什么。之后的所有内容都被视为修饰符(e.x。i,用于区分大小写)。 @不是有效的修饰符。

答案 2 :(得分:0)

正则表达式中的'修饰符'是出现在主表达式之外的字符。有一些允许的修饰符,它们执行各种操作。例如,'i'修饰符使表达式不区分大小写。 '@'不是有效的修饰符。

那你为什么被告知这个?

您的表达式中有一个/字符,该字符被视为表达式的结尾,因为它与表达式开头的/匹配。因此,/之后的所有内容都被视为修饰符,因为它在表达式之外。

/之后的第一个字符是@,这就是被警告的内容。

至于/在那里做了什么,我真的不能说 - 它看起来不像是在那里,而且它前面的^都没有。 / p>

我的建议是删除^/,并在表达式的末尾添加$/

话虽如此,看起来您正在尝试验证和发送电子邮件地址。如果是这种情况,我建议查找一些有效的表达式,因为这看起来可以做很多工作(不仅仅是我已经建议的更改)。

希望有所帮助。