PHP:is_string函数在我的验证表单

时间:2016-09-06 06:51:10

标签: php

有人能帮助我吗?我开始学习PHP,我正在尝试验证我的用户名和密码。它应该只输入字符,否则会提示验证错误。但是,即使我输入数字,我的表格仍然是成功的。我已经使用is_string函数进行验证,但它似乎无法正常工作。

这是我的代码:

<?php

    if(isset($_POST['submit'])) {
        $username = $_POST['username'];
        $password = $_POST['password'];
        if(!is_string($username) && !is_string($password)) {
            echo "Error! Please input characters only.";
        }
        else {
            echo "successful";
        }
    }
    else {
            $username = "";
            echo "Please log in.";
    }
?>

<!DOCTYPE html>
<html>
<head>
    <title> First Page </title>
    <meta charset="UTF-8"/>
</head>
<body>

    <form action="basic.php" method="POST">
    Username: <input type="text" name="username" value="<?php $username ?>" /> <br/>
    Password:   <input type="password" name="password" /> <br/>
    Submit: <input type="submit" name="submit" value="Submit" />
    </form>


</body>
</html>

4 个答案:

答案 0 :(得分:1)

is_string仅检查您正在使用的变量类型。并且,在这种情况下,两个变量确实是字符串,因为它们应该是。

如果要验证,可以使用正则表达式匹配,例如:

if(preg_match( '/^[0-9]+$/', $string )) {
    // all numbers
}

但要注意,正则表达式对初学者来说可能是令人生畏的。

答案 1 :(得分:1)

将此代码替换为您的代码,以解决您的问题

if(preg_match('/[^A-Za-z]/', $username) && preg_match('/[^A-Za-z]/', $password)) 
{
  echo "Error! Please input characters only.";
}
else
{
  echo "successful";
}

答案 2 :(得分:0)

$_POST['username']可能是'1234',确实包含数字,但仍被视为string。由于is_string()仅检查变量的类型,因此它正在按预期工作。

对于验证,您可以使用正则表达式(正则表达式),但我认为这有点矫枉过正,而且性能方面不是最佳选择。像ctype_alpha这样的原生函数可能更适合。

答案 3 :(得分:0)

使用preg_match验证您的用户名和密码。例如,在hiteachers.com,我只允许字母(启用不区分大小写的模式),句点(如在初始中),撇号,空格和破折号,并且值应该在4的范围内长度为20个字符,您可以使用(preg_match ('/^[\w \'.-]{4,20}$/i', $_POST['username']))