You need to enable JavaScript to run this app. 如何用PHP验证后缀为.ac.uk的学校邮箱域名?
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP验证后缀为.ac.uk的学校邮箱域名?

PHP 校验.ac.uk后缀学校邮箱方案

原代码存在的问题

  • 变量名不一致:前面将提交的邮箱存入$uemail,后续正则校验误用了未定义的$email,会触发逻辑错误
  • 正则规则不严谨:正则中的.未转义,会匹配任意字符,同时没有避免后缀出现在用户名部分的问题(比如testac.uk@qq.com会被误判为符合要求)
  • 逻辑结构不完整:缺少分支闭合,合法邮箱没有对应的处理逻辑

修复后的校验代码

兼容低PHP版本的正则版本

$emailErr2 = $emailErr3 = '';
$uemail = '';
if (empty($_POST["uni_email"])) {
    $emailErr2 = "University email is required";
} else {
    $uemail = trim($_POST["uni_email"]);
    // 先校验基础邮箱格式
    if (!filter_var($uemail, FILTER_VALIDATE_EMAIL)) {
        $emailErr3 = "Invalid email format";
        echo $emailErr3;
    } else {
        // 拆分出域名部分校验后缀
        $email_domain = substr(strrchr($uemail, "@"), 1);
        // 正则校验域名以.ac.uk结尾,转义.避免匹配任意字符,i修饰符忽略大小写
        if (!preg_match('/\.ac\.uk$/i', $email_domain)) {
            $emailErr3 = "Invalid university email format, must end with .ac.uk";
            echo $emailErr3;
        } else {
            // 邮箱校验通过的后续逻辑
            echo "邮箱校验合法";
        }
    }
}

PHP 8.0+ 更高效的版本

用内置的str_ends_with函数替代正则,性能更高也避免正则编写失误的问题:

// 前面基础校验逻辑不变,后缀校验替换为:
if (!str_ends_with(strtolower($email_domain), '.ac.uk')) {
    $emailErr3 = "Invalid university email format, must end with .ac.uk";
    echo $emailErr3;
}

checkdnsrr函数的适用说明

这个函数完全可以用在该场景做增强校验,不需要校验.ac.uk本身,而是校验拆分出来的完整邮箱域名(比如示例的email.ac.uk)是否存在MX邮件交换记录:

// 后缀校验通过后加一层MX记录校验
if (!checkdnsrr($email_domain, 'MX')) {
    $emailErr3 = "该邮箱域名不存在,无法接收邮件";
    echo $emailErr3;
}

这层校验可以过滤掉用户编造的、实际不存在的.ac.uk后缀域名,进一步提升校验的有效性。

内容的提问来源于stack exchange,提问作者bola Oyetade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 05:45:03