正则表达式可以在javascript中工作,但不能在PHP中工作
我有一个regexp来检查在Javascript中工作的电子邮件地址:正则表达式可以在javascript中工作,但不能在PHP中工作,php,javascript,regex,Php,Javascript,Regex,我有一个regexp来检查在Javascript中工作的电子邮件地址: var re = /^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/; "any.address@gmail.com".search(re); // returns 0 但是,当我在PHP中使用preg_match()时,使用相同的regexp和email就不起作用了 $re = "/^([0-9a-z
var re = /^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/;
"any.address@gmail.com".search(re); // returns 0
但是,当我在PHP中使用preg_match()时,使用相同的regexp和email就不起作用了
$re = "/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/";
echo preg_match($re,"any.address@gmail.com");
// echoes 0 - not 1!!
编辑
好的,我要补充更多细节
完整代码如下:
$re = '/^([0-9a-zA-Z]([-.\w\+\%\#\!\$\'\*\/\=\?\^\`\{\|\}\~]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/';
if(is_array($recipients)){
for($i=0;$i<count($recipients);$i++){
echo preg_match($re,$recipients[$i]) . " - " . $recipients[$i] . "<br />";
}
}
$re='/^([0-9a-zA-Z]([-.\w\+\%\\\\\\\\\\\!\$\\\\*/\=?\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[[0-9a-zA-zA-Z])*@([0-9;
if(is_数组($recipients)){
对于($i=0;$i您忘记了反斜杠在PHP中用于双引号字符串时具有特殊意义
您是否只为了确认模式是您所期望的模式而echo$re;
$re = "/^([0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]{2,9})$/"
$re = '/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/';
顺便说一句,正如其他人所提到的,它是
我想我会提出转义,因为当使用双引号时(即使在本例中不是这样),转义可能会或将成为模式的问题。您忘记了,当在双引号字符串中使用反斜杠时,反斜杠在PHP中具有特殊意义
您是否只为了确认模式是您所期望的模式而echo$re;
$re = "/^([0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]{2,9})$/"
$re = '/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/';
顺便说一句,正如其他人所提到的,它是
我想我会提出转义,因为当使用双引号时(即使在本例中不是这样),转义可能或将成为模式的问题。您需要使用单引号,以便忽略转义字符
$re = '/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/';
preg_match_all($re, 'any.address@gmail.com', $arr, PREG_PATTERN_ORDER);
var_dump($arr);
您需要使用单引号,以便忽略转义字符
$re = '/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/';
preg_match_all($re, 'any.address@gmail.com', $arr, PREG_PATTERN_ORDER);
var_dump($arr);
通常建议使用PHPs内置正则表达式进行电子邮件验证,它具有更广泛的语法变体覆盖范围:
filter_var($email, FILTER_VALIDATE_EMAIL)
请参阅。
但是顺便说一句,它也是使用正则表达式实现的。请参阅
不过,这与您最初遇到的空白问题无关。通常建议使用PHPs内置正则表达式进行电子邮件验证,它涵盖了更广泛的语法变体:
filter_var($email, FILTER_VALIDATE_EMAIL)
请参阅。
但是顺便说一句,它也是使用正则表达式实现的。请参阅
但与您最初遇到的空白问题无关。Nofoo+bar@example.com?(更不用说<代码> %,<代码> <代码>等)。我是一个中等悲伤的熊猫。这很奇怪。似乎不同意。对不起,PISKVOR,添加了更多的符号,根据使用<代码>前缀 >,并考虑<代码>过滤器VALVAR。($mail,FILTER\u VALIDATE\u EMAIL)
相反。您的地址列表很可能包含换行符或其他内容。请给我们一个var\u dump()。谢谢您,mario!在第一个电子邮件地址之后,电子邮件地址中有额外的空格。我将使用FILTER\u var($mail,FILTER\u VALIDATE\u EMAIL)在这种情况下,代替preg_match nofoo+bar@example.com?(更不用说<代码> %,<代码> <代码>等)。我是一个中等悲伤的熊猫。这很奇怪。似乎不同意。对不起,PISKVOR,添加了更多的符号,根据使用<代码>前缀,并考虑<代码> FieldVar($mail,FieldIsAuthAuthEmail)。
相反。您的地址列表很可能包含换行符或其他内容。请给我们一个var\u dump()。谢谢您,mario!在第一个之后的电子邮件地址中有额外的空白。我将使用filter\u var($mail,filter\u VALIDATE\u email)在这种情况下,用preg_match代替preg_match,这只是部分正确。对于无效的转义序列,PHP返回输入。echo“\w”
实际输出“\w”@LinusKleen:同意,我在回答的底部添加了一个更明确的信息,但谢谢你的反馈。我附和了它,这正是我所期望的。我改为单引号,仍然不行。@Martin:一定是你的原因。我试过了(并发布了来自ideone的演示)结果是1.还有其他移动的部分吗?@Martin:接收者持有什么信息?任何空格(可能在测试之前通过trim()
)都只是部分正确。对于无效的转义序列,PHP返回输入。echo“\w”
实际输出“\w”@LinusKleen:同意,我在回答的底部添加了一个更明确的信息,但谢谢你的反馈。我附和了它,这正是我所期望的。我改为单引号,仍然不行。@Martin:一定是你的原因。我试过了(并发布了来自ideone的演示)结果是1.还有其他活动部分吗?@Martin:收件人持有什么信息?任何空格(可能在测试前通过trim()
)我接受这个答案,因为这是验证电子邮件的正确方法。这与trim()相结合
解决方案,解决了我的答案。我接受这个答案,因为这是验证电子邮件的正确方法。这与trim()
解决方案一起,解决了我的答案。