使用preg_match验证特定域名邮箱的正则表达式技术求助
搞定仅允许@School.edu结尾的邮箱验证正则
嘿,我来帮你修正这个邮箱验证的正则问题!你的现有代码里的正则有几个小疏漏,我一步步给你理清楚:
先说说你当前正则的问题
你写的/^[a-zA-Z0-9]+\\oneonta.edu$/i有两处明显问题:
- 漏了邮箱必须的
@符号,而且\\oneonta的写法完全不对,我们需要精确匹配@School这个前缀 - 正则里的
.是通配符,会匹配任意字符,所以.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
相关产品推荐
相关产品推荐

