我正在尝试使用Auth在我的Kohana应用程序中强制执行强(呃)密码,使用以下正则表达式要求至少一个大写字母,一个小写字母,一个数字,一个非字母(特殊字符),至少8个字符。
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]).{8,}$
正则表达式正在运行,可以在Rubular上看到。这是我在Kohana的Model_Auth_User
中使用的代码,它扩展了ORM
。
public function rules() {
return array(
'password' => array(
array('not_empty'),
array('min_length', array(':value', 8)),
array('regex', array(':value', '/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]).{8,}$/'))
)
);
}
但是,在创建新用户帐户或更改现有帐户的密码时,此正则表达式似乎完全被忽略。上面一行的min_length
工作正常!
它会阻止我使用test
作为密码,因为它不到8个字符,但testing123
没有提供任何类型的错误消息。
任何想法为什么会发生这种情况并绕过它?
答案 0 :(得分:1)
想出来 - 你必须将正则表达式添加到get_password_validation
函数(在同一个模型中),否则它不会输出任何错误信息。
public static function get_password_validation($values) {
return Validation::factory($values)
->rule('password', 'min_length', array(':value', 8))
->rule('password', 'regex', array(':value', '/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]).{8,}$/'))
->rule('password_confirm', 'matches', array(':validation', ':field', 'password'));
}
如果添加,rules()
函数中的正则表达式需要被删除,或者无法登录,因为它对散列字符串运行正则表达式检查,该字符串不包含任何特殊内容字符。
希望这有助于某人。