diff --git a/mo/users.py b/mo/users.py
index 6fef5ec9ad8280e6f5bf6693abdb76782885de6e..e87c5de6a7991c4d8110e73230d45a0e43127bb8 100644
--- a/mo/users.py
+++ b/mo/users.py
@@ -165,6 +165,13 @@ def user_by_uid(uid: int) -> db.User:
     return db.get_session().query(db.User).get(uid)
 
 
+password_help = 'Heslo musí mít alespoň 8 znaků. Doporučujeme kombinovat velká a malá písmena a číslice.'
+
+
+def validate_password(passwd: str) -> bool:
+    return len(passwd) >= 8
+
+
 def set_password(user: db.User, passwd: str):
     salt = bcrypt.gensalt()
     hashed = bcrypt.hashpw(passwd.encode('utf-8'), salt)
diff --git a/mo/web/auth.py b/mo/web/auth.py
index 1185c38e60bb1fafedd20353f55e035972a2434e..f5634d1f88120de8526225bf4ecfeffc39c80834 100644
--- a/mo/web/auth.py
+++ b/mo/web/auth.py
@@ -127,7 +127,7 @@ def handle_need_login(e):
 class ResetForm(FlaskForm):
     email = EmailField('E-mail', description='Účet pro který se nastavuje nové heslo', render_kw={"disabled": "disabled"})
     token = wtforms.HiddenField()
-    passwd = wtforms.PasswordField('Nové heslo', description='Heslo musí mít alespoň 8 znaků. Doporučujeme kombinovat velká a malá písmena a číslice.')
+    passwd = wtforms.PasswordField('Nové heslo', description=mo.users.password_help)
     submit = wtforms.SubmitField('Nastavit heslo')
     cancel = wtforms.SubmitField('Zrušit obnovu hesla')
 
@@ -155,8 +155,8 @@ def reset():
         db.get_session().commit()
         flash('Obnova hesla zrušena', 'warning')
         return redirect(url_for('login'))
-    elif len(form.passwd.data) < 8:
-        flash('Heslo musí být aspoň 8 znaků dlouhé', 'danger')
+    elif not mo.users.validate_password(form.passwd.data):
+        flash(mo.users.password_help, 'danger')
         return render_template('reset.html', form=form)
     else:
         mo.users.do_reset_password(user)