仅允许输入框或文本区域中的数字和字母

时间:2014-03-23 11:09:30

标签: php regex

我有表格,我想让它安全,所以我想在将其保存到我的数据库之前验证每个输入值。例如,我有这个输入字段:

<input type="text" name="username" value="" />

现在例如,某人用数字和字母之类的东西填充它,比如

myusername12|\/+*()!#$%^@^&_-+=.,';"

这可能是危险的价值观。所以我想首先检查字段是否只包含字母和数字,并且只回显&#34;字母和数字&#34;除此以外。我怎么能这样做?

3 个答案:

答案 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" />';

小注意:我不知道浏览器是否执行复杂的正则表达式(或以不同方式执行)。