Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/162.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
PHP正则表达式_Php_Regex - Fatal编程技术网

PHP正则表达式

PHP正则表达式,php,regex,Php,Regex,一个简单的电子邮件验证脚本一直在我身上失败 if(!preg_match('^[^@]{1,63} @ [^@]{1,255}$', $input)) { return false; } 它应该很简单,确保只有一个“@”符号,本地和域地址的长度正确。但有效的电子邮件总是无法通过这一测试。在错误日志中,我还不断收到一条消息,@'是一个未定义的变量。我能逃脱吗?把反斜杠放在他们面前也没用 提前谢谢 *编辑:我想我应该指定,电子邮件验证脚本还有很多内容,我只是没有发布,因为这些部分工作正常。

一个简单的电子邮件验证脚本一直在我身上失败

if(!preg_match('^[^@]{1,63} @ [^@]{1,255}$', $input)) {
    return false;
}
它应该很简单,确保只有一个“@”符号,本地和域地址的长度正确。但有效的电子邮件总是无法通过这一测试。在错误日志中,我还不断收到一条消息,@'是一个未定义的变量。我能逃脱吗?把反斜杠放在他们面前也没用

提前谢谢


*编辑:我想我应该指定,电子邮件验证脚本还有很多内容,我只是没有发布,因为这些部分工作正常。这显然不是唯一的验证,但它是唯一一个让我不断出错的验证。

仅用一个简单的正则表达式验证电子邮件肯定会失败。查看这篇文章,其中介绍了如何使用PHP正确验证电子邮件地址:

if(!preg_match('^[^@]{1,63} @ [^@]{1,255}$', $input)) {
    return false;
}

从这里的评论中,您还可以检查PHP的filter_var函数,它看起来简单有效(最好不要重新发明轮子):


仅用一个简单的正则表达式验证电子邮件肯定会失败。查看这篇文章,其中介绍了如何使用PHP正确验证电子邮件地址:

从这里的评论中,您还可以检查PHP的filter_var函数,它看起来简单有效(最好不要重新发明轮子):


您不应该使用该正则表达式来验证电子邮件地址。真的

无论如何,您的问题在于
preg_match
语法,它作为第一个参数接受格式为
/[…]/
的模式,其中/are PCRE

所以你的电话是:

 if(!preg_match('/^[^@]{1,63}@[^@]{1,255}$/', $input)) {

但是请不要这样使用它。

您不应该使用该正则表达式来验证电子邮件地址。真的

无论如何,您的问题在于
preg_match
语法,它作为第一个参数接受格式为
/[…]/
的模式,其中/are PCRE

所以你的电话是:

 if(!preg_match('/^[^@]{1,63}@[^@]{1,255}$/', $input)) {

但请不要这样使用。

请保持中间状态,即
preg_match()
和其他
preg_*()
函数不可靠,因为它们在失败时返回
0
false
,因此简单的if不会引发错误

考虑使用:


请注意,
preg_match()
和其他
preg_*()
函数不可靠,因为它们在失败时返回
0
false
,因此简单的if不会引发错误

考虑使用:


为什么
@
周围有空格?对于
,这也会返回true!“£$%^&*()@!”£$%^&*()
。不好的时候。空间只是为了让眼睛容易看。真正的版本没有。但可能不应该添加这些字符。@Renzo:您确实需要删除空格,因为这些字符需要与输入匹配。所以它会匹配“a@b.c”,但不匹配“a@b.c“。为什么
@
周围有空格?对于
,这也会返回true!”!“£$%^&*()@!”£$%^&*()
。不好的时候。空间只是为了让眼睛容易看。真正的版本没有。但可能不应该添加这些字符。@Renzo:您确实需要删除空格,因为这些字符需要与输入匹配。所以它会匹配“a@b.c”,但不匹配“a@b.c“哦,我意识到了。这只是验证的一部分,我确实经历了很多其他步骤,只是这是一个有问题的部分,不断出错,我不知道为什么。我明白了,尽管如此,检查一下filter_var是否为您提供了技巧,毕竟它内置在PHP中,为什么要重建一些已经存在并且可以工作的东西?你可以把这段时间花在项目的其他部分:)你意识到PHP内部过滤\验证\电子邮件实际上只是一个正则表达式吗?(顺便说一句,不是最好的)可能是这样,但除非你有非常具体的要求,要求你重新发明轮子,否则我还是喜欢在自己烤东西之前使用现成的解决方案。那当然只是个人喜好。哦,我意识到了。这只是验证的一部分,我确实经历了很多其他步骤,只是这是一个有问题的部分,不断出错,我不知道为什么。我明白了,尽管如此,检查一下filter_var是否为您提供了技巧,毕竟它内置在PHP中,为什么要重建一些已经存在并且可以工作的东西?你可以把这段时间花在项目的其他部分:)你意识到PHP内部过滤\验证\电子邮件实际上只是一个正则表达式吗?(顺便说一句,不是最好的)可能是这样,但除非你有非常具体的要求,要求你重新发明轮子,否则我还是喜欢在自己烤东西之前使用现成的解决方案。这当然只是个人喜好。