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内部过滤\验证\电子邮件实际上只是一个正则表达式吗?(顺便说一句,不是最好的)可能是这样,但除非你有非常具体的要求,要求你重新发明轮子,否则我还是喜欢在自己烤东西之前使用现成的解决方案。这当然只是个人喜好。