检查并查看$\u POST是否包含特定的PHP字符串

检查并查看$\u POST是否包含特定的PHP字符串,php,Php,我现在正试图弄清楚如何使用php检查并查看$_POST['email']是否包含特定字符串 我现在试过了 }elseif(empty($_POST['email']) || !strpos('@gmail.com', $_POST['email'])) { 输出表示strpos不包含结尾,但它确实包含结尾。我现在做错了什么,或者有其他的方法吗 我只希望人们能够注册gmail,而不是任何其他未知的垃圾邮件帐户。如果您想尝试其他方法,而不是strpos,您可以执行以下操作: if (empty($

我现在正试图弄清楚如何使用php检查并查看$_POST['email']是否包含特定字符串

我现在试过了

}elseif(empty($_POST['email']) || !strpos('@gmail.com', $_POST['email'])) {
输出表示strpos不包含结尾,但它确实包含结尾。我现在做错了什么,或者有其他的方法吗


我只希望人们能够注册gmail,而不是任何其他未知的垃圾邮件帐户。

如果您想尝试其他方法,而不是
strpos
,您可以执行以下操作:

if (empty($_POST['email'] || array_pop(explode('@', $email)) != "gmail.com") {
    // Do something if the email is empty or the domain is not "gmail.com"
}

您最好使用
preg\u match
\b
模式匹配,而不是
strpos
。另外,
strpos
将匹配
GMAIL
如果您不需要大写字母,您可以使用
stripos
,它将匹配为不区分大小写,仅供参考

使用
strpos
将匹配
gmail.comm
,而不是预期的
gmail.com
,我相信您不希望这样。用户可以很好地输入
email@gmail.comm
并且仍然被认为是有效的,我确信您不想要的其他东西,这将在尝试发回邮件或使用自动回复程序时失败

  • 来自手册-基于示例2
模式中的\b表示单词边界,因此只有 *单词“web”是匹配的,而不是像“webbing”或“cobweb”这样的部分单词

这与@GMAIL.com或@GMAIL.comm不匹配,但与@GMAIL.com匹配,但不匹配

<?php
if(isset($_POST['submit'])) {

$contains = "@gmail.com";

$email = $_POST['email'];

// or use (as outlined below)
// if(isset($_POST['email']) && preg_match("/\b(@gmail.com)\b/", $_POST['email']))

    if(isset($_POST['email']) && preg_match("/\b($contains)\b/",$email )) {
        echo 'yey! gmail!';
    } else {
        echo 'invalid input!';
    }
}

?>

<form method="POST">
    <input type="text" name="email" />
    <input type="submit" name="submit" />
</form>


您应该使用
strpos(..)==false
而不是
!strpos(..)
,因为它也可以返回0作为索引。可能重复。@md_5检查我在下面发布的内容。您最好使用
preg_match()对于这个,IMO,这是更好的,无论如何我希望当OP回到网上,应该考虑选择这一个。@幽灵感谢幽灵。)感谢弗莱德@ II-今天的帮助,我今天弄清我的错误和困惑。使用PrimgMatter,因为你走得更远和精确的方式来做这件事,为我省去了很多麻烦。f将来可能发生的事情。和@Ghost,因为我无法在一篇帖子中添加超过1个额外用户:)
if(isset($_POST['email']) && preg_match("/\b(@gmail.com)\b/", $_POST['email']))