如何判断一个电子邮件地址是教育邮件地址还是非教育邮件地址?

6
我希望只有大学生能够注册我的网站,但我不知道如何控制。我也希望 .edu.fr、edu.tr 或其他 .edu 扩展名的用户可以加入我的网站,而不仅限于 .edu 的用户。我考虑使用一些正则表达式,但是找不到任何解决方案。如果有人能帮我就太好了?
这并不是非常重要,但我正在使用 Laravel 框架的 PHP。

2
请查看以下两篇文章:http://stackoverflow.com/questions/5136678/php-validate-email-address-based-on-the-domain-name 和 https://dev59.com/zljUa4cB1Zd3GeqPWf6_ - Stegrex
2
对我来说,这似乎是一项无望的任务。你无法保证电子邮件遵循任何格式。例如,我的大学为学生提供了一个ulaval.ca的电子邮件地址。 - Vincent Savard
2个回答

3
大多数教育机构的域名都遵循这种模式:
uni.edu
uni.edu.fr
uni.ac.uk

以下正则表达式涵盖了所有这些情况:
/(\.edu(\.[a-z]+)?|\.ac\.[a-z]+)$/

您可以根据需要添加正则表达式的案例。通过发送带有确认链接的自动电子邮件来验证电子邮件是否真实。

对应的PHP代码:

if (preg_match('/(\.edu(\.[a-zA-Z]+)?|\.ac\.[a-zA-Z]+)$/i', $domain)) {
    // allow
}

2

没有一个很好的方法来做到这一点,但可能的一种方式是使用 @ 符号拆分地址:

// Split the email address into 2 values of an array using the @ symbol as delimiter.
$emailParts = explode('@', $theEmailAddress);
// If the second part (domain part) contains .edu, period, country code or just .edu, then allow signup.
if (preg_match('/\.edu\.[^.]+$/i', trim($emailParts[1])) || preg_match('/\.edu$/i', trim($emailParts[1]))) {
    // Use the above if you are assuming that the country codes can be any number of characters. If you know for sure country codes are 2 chars, use this condition:
    // (preg_match('/\.edu\.[^.]{2}$/i', trim($emailParts[1])) || preg_match('/\.edu$/i', trim($emailParts[1])))
    // Allow signup
}

当然,这并不保证该域名或电子邮件地址是真实存在的!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接