You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用preg_match验证特定域名邮箱的正则表达式技术求助

搞定仅允许@School.edu结尾的邮箱验证正则

嘿,我来帮你修正这个邮箱验证的正则问题!你的现有代码里的正则有几个小疏漏,我一步步给你理清楚:

先说说你当前正则的问题

你写的/^[a-zA-Z0-9]+\\oneonta.edu$/i有两处明显问题:

  1. 漏了邮箱必须的@符号,而且\\oneonta的写法完全不对,我们需要精确匹配@School这个前缀
  2. 正则里的.是通配符,会匹配任意字符,所以.edu里的点必须转义成\.,不然会把edux这类错误后缀也当成合法的

正确的正则表达式

针对仅允许@School.edu结尾的需求,正确的正则应该是这样:

/^[a-zA-Z0-9._-]+@School\.edu$/i

给你拆解下每个部分的作用:

  • ^:锁定字符串的开头,确保邮箱前缀从这里开始
  • [a-zA-Z0-9._-]+:匹配邮箱的用户名部分,允许大小写字母、数字,还有邮箱里常见的.、_、-,+表示至少要有一个字符(避免空用户名)
  • @School:精确匹配@School这个固定部分,确保域名前缀正确
  • \.edu:转义后的.,精确匹配.edu后缀,防止误匹配其他字符
  • $:锁定字符串的结尾,确保邮箱只能以.edu结束,不能加其他内容
  • i:开启不区分大小写模式,这样@school.edu(小写s)也能通过验证,如果需要严格区分大小写,去掉这个i就行

修正后的完整PHP代码片段

把你的代码调整成这样就可以正常运行了:

$username = $_REQUEST["username"];
$password = $_REQUEST["pass"];
$repeatP = $_REQUEST["repeat"];
//Username is Acceptable, Passwords Match and Appropirate Size
$userCheck = false;
if(preg_match("/^[a-zA-Z0-9._-]+@School\.edu$/i", $username)) {
    $userCheck = true;
?>
<p>Username is Acceptable</p>
<?php
} else {
?>
<p>Username is invalid! It must end with @School.edu</p>
<?php
}

额外小提示

如果后续需要调整允许的用户名字符(比如允许加号+,有些邮箱支持),直接把+加到[a-zA-Z0-9._-]这个字符集里就行,比如改成[a-zA-Z0-9._-+]。

内容的提问来源于stack exchange,提问作者Zack Maguffin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:34:11