php - 表单特殊字符验证
问题描述
我想验证用户的输入,因此只允许使用字母/数字和空格。我在谷歌上找到了一些例子,这就是我从中做出的。对我来说,这段代码是逻辑的,应该可以工作,但是每当我在表单中输入一个特殊字符,然后按下提交按钮时,它就不会显示错误。
有谁知道我在这里错过了什么或我做错了什么?
<?php
$Input1 = "";
$Input1Err = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if(empty($_POST["Input1"])){
$Input1Err = "Enter something.";
}else{
$Input1 = test_input($_POST["Input1"]);
if(!preg_match("/[^a-z0-9 _]+$/i", $Input1)){
$Input1Err = "Only letters and space is allowed.";
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
这是我使用的 html 代码:
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST">
<p>Enter your name <input type="text" required name="Input1" placeholder="Enter here.."></p>
<span class="error">*<?php echo $Input1Err;?></span>
解决方案
正则表达式只允许字母数字和空格
^[a-z0-9 .\-]+$
if else 条件中还缺少一个右括号
$Input1 = "";
$Input1Err = "";
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
if(empty($_POST["Input1"]))
{
$Input1Err = "Enter something.";
}
else
{
$Input1 = test_input($_POST["Input1"]);
if(!preg_match('/^[a-z0-9 .\-]+$/i', $Input1))
{
$Input1Err = "Only letters and space is allowed.";
}
}
}
推荐阅读
- c++ - 使用 boost-spirit 的函数解析器
- python - 如何遍历列表的列?
- typescript - 如何观察对调用 firestore onSnapShot 的函数所做的更改?
- php - 获取重复子组的所有匹配项
- google-sheets - 如何修复“#DIV/0!” Excel导入错误?
- c++ - sort() 在类对象向量上给出分段错误
- javascript - 如何将 Azure Blob 数据引入 C# ASP 网站
- xamarin.android - 无法使用 Mvvm Model xamarin 实现 YouTube Android Player API
- angular - Angular 6 导航列表项
- javascript - 当容器有右滚动条时,Flex 项目宽度在 IE11 中不起作用