2011-05-30 150 views
-2

不知道我在这种情况下需要做什么,因为我尝试了几种方法来解决这个问题。警告:preg_match()[function.preg-match]:未知修饰符'@'

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; 
} 
+1

'^ /'应该做什么?而@和更多的正则表达式呢?我认为你需要学习正则表达式... – 2011-05-30 17:52:44

+0

请格式化你的问题。 – orftz 2011-05-30 17:53:34

+2

@orftz - 虽然它不是完整的编辑权限,但我可以提醒你,你也可以编辑帖子:http://blog.stackoverflow.com/2011/02/suggested-edits-and-edit-review/此外,你可以通过提交有效的修改,最多可以获得1000个代表。此功能会要求用户现在编辑他们的帖子有点多余。谢谢。 – Kev 2011-05-30 20:35:37

回答

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. 我不知道这是否会真正匹配的电子邮件的结尾,我必须测试它。

您得到的错误是因为它认为第二个未转义的正斜杠标记了表达式的结尾。所以...

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

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

2

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

也许你想逃避最后的斜线\/,但你然后在末尾$/丢失一个。为什么在这里使用字符串连接?整个正则表达式似乎不匹配电子邮件地址。

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

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

用于'filter_var'的+1。 – Jonah 2011-05-30 18:00:41

0

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

那么,为什么你被告知这个?

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

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

至于什么/在那里做,我不能告诉 - 它看起来不是它的意思,并且它在它之前并不是^

我的建议是删除^/,并将$/放在表达式的末尾。

话虽如此,它看起来像你试图验证和电子邮件地址。如果是这样的话,我会建议查找一些有效的表达式,因为这看起来可以做很多工作(不仅仅是我已经提出的更改)。

希望有所帮助。

相关问题