如何限制邮箱仅接受 Gmail 地址(@gmail.com 结尾)

大涛小哥_8248

大涛小哥_8248

2026-08-22

880人浏览

原创

如何限制邮箱仅接受 Gmail 地址(@gmail.com 结尾)

本文介绍在 PHP 后端安全校验邮箱域名的方法,重点实现仅允许以 @gmail.com 结尾的邮箱地址通过验证,并集成到 DotMailsGenerator 工具中,避免前端 pattern 属性被绕过。

本文介绍在 php 后端安全校验邮箱域名的方法,重点实现仅允许以 `@gmail.com` 结尾的邮箱地址通过验证,并集成到 dotmailsgenerator 工具中,避免前端 pattern 属性被绕过。

在开发类似 DotMailsGenerator 这样的 Gmail 点号变体生成工具时,仅依赖前端 HTML 的 pattern 属性(如 <input type="email" pattern="^[a-zA-Z0-9]+@gmail\.com$">)是不安全的——用户可轻易禁用 JavaScript、修改表单或直接发送 POST 请求绕过校验。因此,必须在 PHP 服务端进行严格、可靠的域名后缀验证。

以下是三种推荐的 PHP 后端验证方式,按兼容性与可读性排序:

✅ 推荐方案:PHP 8.0+ 使用 str_ends_with()(最简洁、语义清晰)

function isGmail(string $email): bool {
    return str_ends_with($email, '@gmail.com');
}

✅ 兼容方案:正则匹配(支持所有 PHP 版本)

function isGmail(string $email): bool {
    return (bool) preg_match('/@gmail\.com$/i', $email);
}

? 注:/i 标志支持大小写不敏感(如 @GMAIL.COM),\.com 中的反斜杠确保点号被当作字面量而非正则元字符。

✅ 高效方案:strpos() + 负偏移(无正则开销,性能最优)

function isGmail(string $email): bool {
    $suffix = '@gmail.com';
    $pos = strpos($email, $suffix, -strlen($suffix));
    return $pos !== false && $pos === strlen($email) - strlen($suffix);
}

⚠️ 注意:仅用 strpos($email, $suffix, -strlen($suffix)) !== false 不够严谨(例如 test@gmail.com.xyz 也会匹配),因此需额外校验位置是否恰好位于末尾。

小报童
小报童

小报童是一款内容运营工具,flomo 团队推出的付费内容服务平台。

下载

✅ 集成到你的主逻辑中(关键修改)

将以下校验逻辑插入你原有 PHP 脚本的 if(isset($_POST['email'])) 块顶部:

<?php set_time_limit(0);

// ✅ 新增:强制 Gmail 域名校验
function isGmail(string $email): bool {
    return str_ends_with($email, '@gmail.com');
}

if (isset($_POST['email'])) {
    $rawEmail = trim($_POST['email'] ?? '');

    // ❌ 拒绝空、无效或非 Gmail 邮箱
    if (empty($rawEmail) || !isGmail($rawEmail)) {
        http_response_code(400);
        echo '<div class="box"><div class="title">Error</div><textarea type="text">Invalid email: must end with @gmail.com</textarea>';
        exit;
    }

    // ✅ 安全提取用户名和域名(已确保 domain === '@gmail.com')
    [$localPart, $domain] = explode('@', $rawEmail, 2);
    $localPart = stripslashes(trim($localPart));
    $domain = '@' . trim($domain); // 保持 '@gmail.com'

    // ✅ 清理 & 转义(防止 XSS,尤其输出到 textarea)
    $localPart = htmlspecialchars($localPart, ENT_QUOTES, 'UTF-8');

    $res = addDOT($localPart);
    echo '<div class="box">
<div class="title">Total: ' . count($res) . '</div>
<textarea type="text">';
    foreach ($res as $variant) {
        echo $variant . $domain . PHP_EOL;
    }
    echo '</textarea>
</div>';
}

function addDOT(string $str): array { 
    if (strlen($str) > 1) {
        $ca = preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY); // 支持 UTF-8 字符
        array_shift($ca); 
        array_pop($ca); 
        $head = array_shift($ca); 
        $res = addDOT(implode('', $ca)); 
        $result = [];
        foreach ($res as $val) { 
            $result[] = $head . $val; 
            $result[] = $head . '.' . $val; 
        } 
        return $result; 
    } 
    return [$str]; 
}
?>

? 重要注意事项

  • 永远不要信任客户端输入:HTML pattern、JavaScript 校验仅作用户体验优化,不可替代服务端验证。
  • 邮箱格式 ≠ 邮箱有效性:本文仅校验后缀,不验证邮箱是否真实存在或语法合规(如含多个 @)。如需更严格校验,可补充 filter_var($email, FILTER_VALIDATE_EMAIL)
  • 安全性增强建议
    • $localPart 执行 htmlspecialchars() 再输出,防止 XSS(因内容直接写入 <textarea></textarea>);
    • 使用 explode('@', $email, 2) 限定分割次数,避免 user@gmail.com@example.com 类畸形输入;
    • 添加速率限制或验证码,防止滥用生成接口。

通过以上改造,你的工具将真正实现「仅支持 Gmail」的安全策略,兼顾健壮性、可维护性与现代 PHP 最佳实践。

相关文章

gmail邮箱
gmail邮箱

gmail邮箱是一款直观、高效、实用的电子邮件应用。免费提供15GB存储空间,可以永久保留重要的邮件、文件和图片,使用搜索快速、轻松地查找任何需要的内容,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

2023.06.20

3736

8

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

2023.07.05

2221

4

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

5982

9

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

2023.08.11

772

5

正则表达式空格
正则表达式空格

正则表达式空格可以用“\s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

500

5

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

653

12

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“\s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

2023.11.17

366

3

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.12.06

679

7

php正则表达式有哪些
php正则表达式有哪些

php正则表达式有"/pattern/"、"^"、"$"、"."、"[]"、"[^]"、"[a-z]"、"[A-Z]"、"[0-9]"、"\d"、"\D"、"\w"、"\W"、&a

2024.02.23

292

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.1万人学习