java - 我是否做到不接受输入的@gmail、@hotmail、@yahoo 电子邮件?
问题描述
我使用我网站上的电子邮件按钮进行了订阅。如何限制使用@gmail、@yahoo 电子邮件订阅的人?
列出电子邮件地址
$recipient = "test@test.com";
# SUBJECT (Subscribe/Remove)
$subject = "Subscribe";
# RESULT PAGE
$location = "https://test.com";
## FORM VALUES ##
# SENDER - WE ALSO USE THE RECIPIENT AS SENDER IN THIS SAMPLE
# DON'T INCLUDE UNFILTERED USER INPUT IN THE MAIL HEADER!
$sender = $recipient;
$email = $_POST[‘emailTextBox’];
if (!strpos($email, '@') || !strpos($email, '.')) {
echo "Email is invalid";
} else {
}
# MAIL BODY
$body .= "Email: ".$_REQUEST['Email']." \n";
# add more fields here if required
## SEND MESSGAE ##
mail( $recipient, $subject, $body, "From: $sender" ) or die ("Mail could not be sent.");
## SHOW RESULT PAGE ##
header( "Location: $location" );
?>
解决方案
// ...
$email = $_POST[‘emailTextBox’];
if (!filter_var($email, FILTER_VALIDATE_EMAIL) || preg_match('/\@(gmail|yahoo|hotmail)/', $email)) {
// Email is invalid
} else {
// Email is valid
}
filter_var
,与FILTER_VALIDATE_EMAIL
过滤器一起使用,只会检查电子邮件是否实际上是有效的电子邮件preg_match
现在将检查电子邮件是否包含您不想要的域。
如果您希望人们仅使用指定的电子邮件订阅,您需要执行以下操作:
// ...
$email = $_POST[‘emailTextBox’];
if (!filter_var($email, FILTER_VALIDATE_EMAIL) || !preg_match('/\@(gmail|yahoo|hotmail)/', $email)) {
// Email is invalid
} else {
// Email is valid
}
注意!preg_match()
使用filter_var
,您可能还想考虑这个问题及其答案。
推荐阅读
- c++ - 为什么Qt实现返回qint64而不是quint64的QFile::size()
- laravel - 如何为英语和法语字符编写 preg_match?
- java - 使用 RSocketFactory 的替换
- c# - AKS 集群 pod kube 配置位置
- java - 使用带有 Notepad ++ 和 windows cmd 的 pdfbox?
- monitoring - OpenTracing 和 Zipkin 之间的主要区别是什么?
- java - Java 编程 - 基于流程图的编码
- docker - 无法将命令行选项传递给 Gitlab CI 服务?即“-p 4444:4444 -p 5900:5900”
- python - 加载具有一列字符串而其余浮动的numpy数组的最快方法
- excel - Excel VBA 调整表格大小复制公式和形状