有人能帮助我吗?我开始学习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>
答案 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']))
。