From 41387a388a1786354ab4b1f8d6c3a264958bcbeb Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 15 Aug 2014 11:58:54 -0700 Subject: Validate registration form --- public/js/check_email.js | 4 ++++ public/js/register.coffee | 51 +++++++++++++++++++++++++++++++++++++++++++++ public/js/score_password.js | 28 +++++++++++++++++++++++++ views/users/new.html | 2 +- 4 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 public/js/check_email.js create mode 100644 public/js/score_password.js diff --git a/public/js/check_email.js b/public/js/check_email.js new file mode 100644 index 00000000..402b93af --- /dev/null +++ b/public/js/check_email.js @@ -0,0 +1,4 @@ +function validateEmail(email) { + var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; + return re.test(email); +} diff --git a/public/js/register.coffee b/public/js/register.coffee index 57c399e5..a7285424 100644 --- a/public/js/register.coffee +++ b/public/js/register.coffee @@ -1,5 +1,56 @@ #= require js/jquery-1.8.2.min.js +#= require js/jquery-ui.min.js +#= require js/score_password.js +#= require js/check_email.js $(-> $('#username').focus() + + $('#username').blur(-> + $(this).parent().next('.alert').remove() + + if /^[a-z]+$/.test($(this).val()) and $(this).val().length > 2 + $(this).parent().removeClass('has-error') + else + $(this).parent().addClass('has-error') + $(this).parent().after('
Username must be lowecase and have at least 3 characters
') + ) + + $('#password').blur(-> + $('#confirm').blur() + $(this).parent().next('.alert').remove() + score = scorePassword($(this).val()) + + if score > 40 + $(this).parent().removeClass('has-error') + else + $(this).parent().addClass('has-error') + $(this).parent().after('
Weak password
') + ) + + $('#confirm').blur(-> + $(this).parent().next('.alert').remove() + + if $('#password').val() == $('#confirm').val() + $('#confirm').parent().removeClass('has-error') + else + $('#confirm').parent().addClass('has-error') + $('#confirm').parent().after('
Passwords don\'t match
') + ) + + $('#email').blur(-> + $(this).parent().next('.alert').remove() + if validateEmail($(this).val()) + $(this).parent().removeClass('has-error') + else + $(this).parent().addClass('has-error') + $(this).parent().after('
Invalid email
') + ) + + $('#register').submit(-> + $('.form-control').blur() + if $('.has-error').length > 0 + $('.has-error').effect('shake', 500) + return false + ) ) diff --git a/public/js/score_password.js b/public/js/score_password.js new file mode 100644 index 00000000..a28001fa --- /dev/null +++ b/public/js/score_password.js @@ -0,0 +1,28 @@ +function scorePassword(pass) { + var score = 0; + if (!pass) + return score; + + // award every unique letter until 5 repetitions + var letters = new Object(); + for (var i=0; i - + -- cgit v1.2.3