Skip to content

Instantly share code, notes, and snippets.

@seoyoochan
Last active August 29, 2015 14:24
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save seoyoochan/ffb41951c3eb201e0fbe to your computer and use it in GitHub Desktop.
Save seoyoochan/ffb41951c3eb201e0fbe to your computer and use it in GitHub Desktop.
Google Signup Validation (email, username, password) javascript
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