我有表格,我想让它安全,所以我想在将其保存到我的数据库之前验证每个输入值。例如,我有这个输入字段:
<input type="text" name="username" value="" />
现在例如,某人用数字和字母之类的东西填充它,比如
myusername12|\/+*()!#$%^@^&_-+=.,';"
这可能是危险的价值观。所以我想首先检查字段是否只包含字母和数字,并且只回显&#34;字母和数字&#34;除此以外。我怎么能这样做?
答案 0 :(得分:2)
PHP有一个方便的内置函数来执行此测试。
http://php.net/manual/en/function.ctype-alnum.php
在尝试保存数据之前检查此函数是否返回true,但仍要确保您正在运行DB准备。
答案 1 :(得分:1)
怎么样:
if (preg_match('/^[a-z0-9]+$/', $username) {
echo "Looks good\n";
} else {
echo "Invalid character\n";
}
并且,如果你想与unicode兼容:
if (preg_match('/^\p{Xan}+$/', $username) {
echo "Looks good\n";
} else {
echo "Invalid character\n";
}
\p{Xan}
代表任何字母数字。
答案 2 :(得分:0)
不是您问题的完整答案,但html5可以为您执行此操作:
<input type="text" name="username" pattern="![^a-zA-Z0-9]" title="Only digits and letters" />
如果用户模糊输入,则会突出显示红色(至少在FF中)。请注意,这是客户端。您可以在php中使用exaxt相同的正则表达式进行验证。
您还可以保存正则表达式并在以下两者中使用它:
$regex = "[a-zA-Z0-9]";
if(isset($_POST['username'])){
echo preg_match('/'.$regex.'/', $_POST['username']) ? 'match' : 'no match';
}
echo '<input name="username" pattern="'.$regex.'" title="Only digits and letters" />';
小注意:我不知道浏览器是否执行复杂的正则表达式(或以不同方式执行)。