1

我目前正在我的本地机器上开发登录和注册系统以进行测试,现在,我正处于电子邮件检查功能的阶段。如您所知,您可以为此使用 php 内置函数,这不是 100% 正确的。否则,我希望只接受@gmail.com、@hotmail.*、@yahoo.* 和类似的电子邮件,而不是其他人(即@somemail.net)。

所以我想开发看起来像这样的代码:

    <?

    ...

    require_once 'emailformcheck.php';

    if ($email === '@gmail.com' || $email === '@yahoo.com'...) {

        require_once 'emaildbcheck.php';

        require_once 'passwordchecker.php';

}

...

?>

但我不想输入 @gmail.com 或 @yahoo.* ,而是想使用一些通配符来代替,例如:

*@gmail.com 或 *@yahoo.com 。谁能告诉我我需要如何格式化,真的,我在 php 编程方面并不是真正的新手,但我仍然在学习。有人知道一些用于替换 php 文件中的字符串数据的通配符吗?

4

2 回答 2

1

用于regular expressions字符串中的此类模式搜索。PHP 带来了preg扩展。它有据可查,因此我建议您查看文档以及您在网络上找到的数百万个示例:

使用它,您可以将条件编写为:

if ( preg_match($email, '^[^@]+@((gmail\.com)|(yahoo\.com))$') )
于 2013-04-16T07:25:15.590 回答
1

首先运行此函数以检查电子邮件是否有效:

$isValid = filter_var($email, FILTER_VALIDATE_EMAIL);

然后检查域运行以下:

list ($user, $domain) = explode('@', $email);
list ($domain, $tld) = explode('.', $domain);

其中$user 包含@ 之前的数据,domain 包含不包括TLD 的域(例如gmail),而$tld 包含TLD 的第一部分(例如com)。

然后,您可以使用以下条件检查 gmail.com:

if($domain == "gmail" && $tld == "com")

并检查诸如 hotmail 之类的通配符使用:

if($domain == "hotmail")

显然使用通配符会遇到子域问题,例如某人创建域:hotmail.mywebsite.com并且他们的电子邮件是myname@hotmail.mywebsite.com.

于 2013-04-16T07:25:38.483 回答