在php中填写电子邮件的名称部分时,如何过滤由数组创建的特殊字符

在php中填写电子邮件的名称部分时,如何过滤由数组创建的特殊字符,php,html,Php,Html,我已经建立了一个电子邮件应用(?),我希望在用户提交表单时过滤掉特殊字符(例如!@$^) 以下是我迄今为止所做的工作: <?php $name = $_POST['name']; $to = "hm_087@hotmail.com"; $subject = "Test"; $message = $name; $invalid= array("@","!","#"); if (($_

我已经建立了一个电子邮件应用(?),我希望在用户提交表单时过滤掉特殊字符(例如!@$^)

以下是我迄今为止所做的工作:

<?php

$name = $_POST['name'];

$to = "hm_087@hotmail.com";
$subject = "Test";
$message  = $name;

$invalid= array("@","!","#");

if (($_POST['name'])!== $invalid[0]){
    mail($to, $subject, $message);
    echo 'Message sent';
} else {
    echo 'Invalid character entered';
}

?>


如您所见,我创建了一个数组来实现这一点,但我仅限于过滤掉一个特殊字符(即@字符)。我可以从数组中选择所有要过滤掉的字符吗?

您可以使用正则表达式进行字符匹配

if (!preg_match('/[!@£$%^]/', $name)) {
    mail($to, $subject, $message);
    echo 'Message sent';
} else {
    echo 'Invalid character entered';
}

这里它正在检查字符
@英镑$%^
您在问题中特别提到,但“我希望过滤掉特殊字符”有点含糊不清,我怀疑您的意思是在这篇文章中再包含几个字符。如果您可以更具体地说明要允许哪些字符,我们可以细化正则表达式。

“但我只能过滤出一个特殊字符(即@字符)”-您不仅限于此,如果
$\u POST['name']
不完全是
@
,那么您的过滤器也完全失败<代码>foo@bar已通过fyling colors的“测试”…在数组上循环,并检查该值是否包含当前正在检查的字符。如果您不知道如何检查文本是否包含特定字符,请对此进行一些研究。正则表达式也是一种执行类似操作的方法,请更具体地说明您希望在消息中允许哪些字符。允许打电话吗?标点符号?括号?引号?撇号?如果您可以给出一个允许或不允许的确切列表,那么您可以通过regex轻松地做到这一点。