Last active
August 29, 2015 14:24
-
-
Save seoyoochan/ffb41951c3eb201e0fbe to your computer and use it in GitHub Desktop.
Google Signup Validation (email, username, password) javascript
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
define(["marionette", "backbone", "templates/templates"], function(Marionette, Backbone, templates){ | |
var value; | |
var field; | |
var alert_label; | |
var url = "http://api.localhost.dev:3000/v1"; | |
//var url = "http://api.bitsnut.com/v1"; | |
var Model = Backbone.Model.extend({ | |
defaults: { | |
name: "", | |
username: "", | |
email: "", | |
password: "", | |
confirm_success_url: "http://localhost:9000/#welcome" | |
} | |
}); | |
var validate_setup = function(event){ | |
value = $(event.target).val(); | |
field = $(event.target).parent(); | |
alert_label = field.find(".pointing"); | |
}; | |
var error_alert = function(flag, field, alert_label){ | |
if(flag){ | |
field.addClass("error"); | |
alert_label.css("display", "block"); | |
alert_label.addClass("red"); | |
}else{ | |
field.removeClass("error"); | |
alert_label.css("display", "none"); | |
alert_label.removeClass("red"); | |
alert_label.empty(); | |
} | |
}; | |
var signup = Marionette.LayoutView.extend({ | |
template: _.template(templates.signup), | |
className: "signup", | |
initialize: function(){ | |
this.model = new Model(); | |
}, | |
events: { | |
"blur #user_name": "checkName", | |
"blur #user_username": "checkUsername", | |
"blur #user_email": "checkEmail", | |
"blur #user_password": "checkPassword", | |
"click .button": "clickSubmit" | |
}, | |
checkName: function(event){ | |
validate_setup(event); | |
if (value.length === 0){ | |
error_alert(true, field, alert_label); | |
alert_label.text(i18n.t("model.required")); | |
} else { | |
error_alert(false, field, alert_label); | |
} | |
}, | |
checkUsername: function(event){ | |
validate_setup(event); | |
var regex1 = /^(?!\.)(.*?)$/; // 1. 시작이 마침표가 아닌지 검사 | |
var regex2 = /^(?!.*\.{2})(.*?)$/; // 2. 연속적인 마침표가 없는지 검사 | |
var regex3 = /^(.){6,30}$/; // 3. 최소 6자 이상인지 검사 | |
var regex4 = /^((.*?)+[^\.]+$)$/; // 4. 끝에 마침표가 있는지 검사 | |
var regex5 = /^[a-z0-9.]+$/; // 5. 소문자 알파벳, 숫자, 마침표인지 검사 | |
if (value.length === 0){ | |
error_alert(true, field, alert_label); | |
alert_label.text(i18n.t("model.required")); | |
} else { | |
error_alert(false, field, alert_label); | |
var test1 = regex1.test(value); | |
var test2 = regex2.test(value); | |
var test3 = regex3.test(value); | |
var test4 = regex4.test(value); | |
var test5 = regex5.test(value); | |
if(!test1 || !test2 || !test3 || !test4 || !test5){ | |
error_alert(true, field, alert_label); | |
switch(false){ | |
case test1: | |
alert_label.text(i18n.t("model.user.regex.username.period.begin")); | |
break; | |
case test2: | |
alert_label.text(i18n.t("model.user.regex.username.period.consecutive")); | |
break; | |
case test3: | |
alert_label.text(i18n.t("model.user.regex.username.length")); | |
break; | |
case test4: | |
alert_label.text(i18n.t("model.user.regex.username.period.end")); | |
break; | |
case test5: | |
alert_label.text(i18n.t("model.user.regex.username.characters")); | |
break; | |
} | |
} | |
if(test1 && test2 && test3 && test4 && test5){ | |
$.ajax({ | |
dataType: "json", | |
url: url + "/auth/validate", | |
method: "GET", | |
data: { username: value } | |
}).fail(function(xhr){ | |
error_alert(true, field, alert_label); | |
alert_label.text(xhr.responseJSON.message); | |
}); | |
} | |
} | |
}, | |
checkEmail: function(event){ | |
validate_setup(event); | |
var regex1 = /^[a-zA-Z0-9._%+-]+@[a-z0-9.-]+.[a-z]{2,4}$/; | |
if (value.length === 0){ | |
error_alert(true, field, alert_label); | |
alert_label.text(i18n.t("model.required")); | |
} else { | |
var test1 = regex1.test(value); | |
error_alert(false, field, alert_label); | |
if(!test1){ | |
error_alert(true, field, alert_label); | |
alert_label.text(i18n.t("model.user.regex.email")); | |
} else { | |
$.ajax({ | |
dataType: "json", | |
url: url + "/auth/validate", | |
method: "GET", | |
data: { email: value } | |
}).fail(function(xhr){ | |
error_alert(true, field, alert_label); | |
alert_label.text(xhr.responseJSON.message); | |
}); | |
} | |
} | |
}, | |
checkPassword: function(event){ | |
validate_setup(event); | |
// Match 6 to 15 character string | |
var regex1 = /^.{6,15}$/; | |
// Match 8 to 15 character string with at least one upper case letter, one lower case letter, and one digit | |
var regex2 = /((?=.*d)(?=.*[a-z])(?=.*[A-Z]).{8,15})/gm; | |
if(value.length === 0){ | |
error_alert(true, field, alert_label); | |
alert_label.text(i18n.t("model.required")); | |
} else { | |
error_alert(false, field, alert_label); | |
var test1 = regex1.test(value); | |
var test2 = regex2.test(value); | |
if(!test1 || !test2){ | |
error_alert(true, field, alert_label); | |
switch(false){ | |
case test1: | |
alert_label.text(i18n.t("model.user.regex.password.weak")); | |
break; | |
case test2: | |
error_alert(false, field, alert_label); | |
alert_label.text(i18n.t("model.user.regex.password.strong")); | |
break; | |
} | |
} | |
} | |
}, | |
clickSubmit: function(event){ | |
event.preventDefault(); | |
var inputs = $(".form").find(".field input"); | |
var errors = []; | |
var any_error = false; | |
var params = {}; | |
inputs.trigger("blur"); | |
$.each(inputs, function(index, selector){ | |
if ($(inputs[index]).parent().hasClass("error")){ | |
errors.push(true); | |
any_error = true; | |
} else { | |
errors.push(false); | |
} | |
}); | |
if (!any_error){ | |
this.model.set({ | |
name: $(inputs[0]).val(), | |
username: $(inputs[1]).val(), | |
email: $(inputs[2]).val(), | |
password: $(inputs[3]).val() | |
}); | |
params = this.model.toJSON(); | |
$.ajax({ | |
dataType: "json", | |
url: url + "/auth", | |
method: "POST", | |
data: params | |
}).done(function(response){ | |
localStorage.setItem("signup", true); | |
localStorage.setItem("password", $(inputs[3]).val()); | |
Backbone.history.navigate("#almost_there",{ trigger: true }); | |
}).fail(function(xhr){ | |
}); | |
} | |
return false; | |
} | |
}); | |
return signup; | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment