问题描述
||
由于尝试了几种方法来解决此问题,因此不确定在这种情况下我需要做什么。
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;
}
解决方法
PHP将
\"/^[a-z0-9]+([_\\\\.-][a-z0-9]+)^/\"
视为整个表达式(/
被视为定界符)。之后的所有内容都将被视为修饰符。 @
不是有效的修饰语。
也许您想逃脱最后一个斜线\\/
,但随后在$/
末尾缺少一个。为什么在这里使用字符串连接?整个正则表达式似乎与电子邮件地址不匹配。
无论如何,在使用正则表达式之前,请先学习它们。在这种情况下,最好使用PHP的filter_var
:
if (filter_var($email_a,FILTER_VALIDATE_EMAIL)) {
echo \"This (email_a) email address is considered valid.\";
}
, 该正则表达式非常混乱。使用此代替:
/^[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,}$
这有多个问题。
字符串中有几个(未转义的)正斜杠(/
)
字符串末尾没有正斜杠
我不确定这是否真的与电子邮件匹配,我必须对其进行测试。
您得到的错误是因为它认为第二个未转义的正斜杠标记了表达式的结尾。所以...
/^[a-z0-9]+([_\\\\.-][a-z0-9]+)^/
是它所拥有的。之后的所有内容均视为修饰语(例如,不区分大小写的为i
)。 @
不是有效的修饰语。
, 正则表达式中的“修饰符”是出现在主表达式之外的字符。有少数允许的修饰符,它们执行各种操作。例如,\'i \'修饰符使表达式不区分大小写。 \'@ \'不是有效的修饰符。
那你为什么被告知呢?
您的表达式中有一个/
字符,它被视为表达式的结尾,因为它与表达式开头的/
匹配。因此,/
之后的所有内容都被视为修饰符,因为它在表达式之外。
/
之后的第一个字符是@
,因此正在发出警告。
至于/
在那儿所做的事情,我无法真正说出-它看起来并不像它应该在那儿一样,前面的^
也没有。
我的建议是删除^/
,并在表达式末尾加$/
。
话虽如此,看来您正在尝试验证和电子邮件地址。如果是这种情况,我建议您查找一些有效的表达式,因为这看起来可以完成很多工作(不仅仅是我已经建议的更改)。
希望能有所帮助。