-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathvalidate.js
More file actions
115 lines (100 loc) · 3.28 KB
/
validate.js
File metadata and controls
115 lines (100 loc) · 3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
class FormValidator {
constructor(form, fields) {
this.form = form;
this.fields = fields;
}
initialize() {
this.validateOnEntry();
this.enableButton();
this.validateOnSubmit();
}
validateOnEntry() {
let self = this; //stores the value of the 'this' keyword on the constructor
this.fields.forEach(field => {
const input = document.querySelector(`#${field}`);
input.addEventListener("keyup", () => {
self.validateInput(input);
})
})
}
validateOnSubmit() {
this.form.addEventListener("submit", e => {
e.preventDefault(); //prevents the default action on the submit button
button.lastElementChild.style.display = "flex";
setTimeout(() => { button.lastElementChild.style.display = "none" }, 2000);
})
}
validateInput(field) {
if (field.value.trim() === "") {
this.setStatus(field, `${field.getAttribute('name')} cannot be blank!`, "error");
}
else {
if (field.type === "email") {
return this.validateEmail(field);
}
if (field.id === "password") {
return this.validatePassword(field);
}
}
}
validateEmail(field) {
const matchEmail = /\S+@\S+.\S+/;
if (matchEmail.test(field.value)) {
this.setStatus(field, null, "success");
}
else {
this.setStatus(field, "Please input a valid email.", "error");
}
}
validatePassword(field) {
if (field.value.length < 8) {
this.setStatus(field, "Password should be 8 characters long.", "error");
}
else {
this.setStatus(field, null, "success");
}
}
setStatus(field, message, status) {
const errorMessage = field.parentElement.querySelector('.error-message');
const icon = field.parentElement.querySelector('.icon');
if (status === "success") {
icon.classList.remove('red');
icon.classList.add('blue')
errorMessage.innerHTML = "";
}
if (status === "error") {
icon.classList.remove('blue');
icon.classList.add('red');
errorMessage.innerHTML = message;
}
}
enableButton() {
let self = this;
this.form.addEventListener("input", e => {
const email = document.querySelector(`#${fields[0]}`)
const password = document.querySelector(`#${fields[1]}`)
if (self.validEmail(email) === true && self.validPassword(password) === true) {
button.disabled = false;
}
else {
button.disabled = true;
}
})
}
validEmail(field) {
const matchEmail = /\S+@\S+.\S+/; //regex to check email format
if (matchEmail.test(field.value)) {
return true;
}
}
validPassword(field) {
if (field.value.length >= 8) {
return true;
}
}
}
const form = document.querySelector('.form');
const fields = ["email", "password"];
const button = document.querySelector('button');
const validator = new FormValidator(form, fields);
validator.initialize();