我使用下面的clas来验证用户输入。最初它只是一组静态功能组合在一起。
但是,我将其修改为对象样式并添加到私有memeber中以保存用户输入数组。使这个类具有适应性的下一步是什么,即更通用,以便其他人可以将它作为库的一部分使用?
$ message是验证失败时显示给用户的文本。
图书馆代码:
class validate
{
private $input;
function __construct($input_arg)
{
$this->input=$input_arg;
}
function empty_user($message)
{
if((int)!in_array('',$this->input,TRUE)) return 1;
echo $message;return 0;
}
function name($message)
{
if(preg_match('/^[a-zA-Z-\.]{1,40}$/',$this->input['name'])) return 1;
echo $message;return 0;
}
function email($message)
{
if(preg_match('/^[a-zA-Z0-9._s-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{1,4}$/',$this->input['email'])) return 1;
echo $message;return 0;
}
function pass($message)
{
if(preg_match('/^[a-zA-Z0-9!@#$%^&*]{6,20}$/',$this->input['pass'])) return 1;
echo $message;return 0;
}
}
申请代码:
function __construct()
{
parent::__construct();
$obj=check_new($this->_protected_arr);
$a='<si_f>Please enter both an email and a password!';
$b='<si_f>Please enter a valid email!';
$c='<si_f>Please enter a valid password!';
if($obj->empty_user($a) && $obj->email($b) && $obj->pass($c) && self::validate())
{
self::activate_session();
echo "<si_p>";
}
}
答案 0 :(得分:1)
也许值得看看Zend Validate?或者任何其他PHP框架验证类。然后扩展它们以添加您想要的功能。
在回答你的问题时,是否值得在课堂上使用另一个变量,以便检查错误?
class validate
{
private $input;
public $error = false;
function __construct($input_arg)
{
$this->input=$input_arg;
}
function empty_user($message)
{
if((int)!in_array('',$this->input,TRUE)) return 1;
echo $message;$this->error = "Empty message";
}
... else
}
$validate = new validate($empty_message);
if( !$validate->empty_user('this input is empty') === false)
{
echo "Was not empty";
}
答案 1 :(得分:1)
我不会在泛型类中编写所有这些函数。我宁愿拥有执行特定检查的单独函数,也许是一个在我的特定输入上调用这些检查的特定类。
这个类现在回声了,这对于像这样的类来说永远不是一个好的解决方案。只是让它执行检查并在出现问题时引发异常。如果异常太难,或者不适合您的体系结构,请让您的函数返回false,并设置一个可以在以后读取的属性。
关于您的具体检查:
您的电子邮件检查非常严格,不允许所有电子邮件地址。例如,域也可以是IP地址,用户名(@
之前的部分)可以包含许多模糊字符,包括@
。是的,真的!
为什么密码必须至少为6个字符?为什么你要将密码限制为20个字符?我使用超过20个字符的密码,我也知道很多其他人也这样做。让每个人都输入他们想要的一切。任何东西。如果愿意的话,让他们发布3MB的文字。如果他们想要,让他们包括unicode字符。将一堆汉字作为密码有什么更好的保护?如果他们只想进入a
,那也是他们的责任。
你永远不应该存储密码本身,所以只要哈希他们输入的内容并存储给你的32个字符(如果你使用MD5哈希)。您可以拒绝的唯一密码是空密码。别的什么都应该去。
名称相同。 40个字符?真。我可以想象人们的名字很长。添加更多空间。字节数并不昂贵,并不是说你将拥有20亿用户。