Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式可以在javascript中工作,但不能在PHP中工作_Php_Javascript_Regex - Fatal编程技术网

正则表达式可以在javascript中工作,但不能在PHP中工作

正则表达式可以在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

我有一个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-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)
请参阅。
但是顺便说一句,它也是使用正则表达式实现的。请参阅



但与您最初遇到的空白问题无关。

No
foo+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 no
foo+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()
解决方案一起,解决了我的答案。