<html>
<head>
<title>Form Validation</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- Google Fonts -->
<link
href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600&display=swap"
rel="stylesheet"
/>
<!-- Stylesheet -->
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div class="container">
<form autocomplete="off">
<h4>Create Your Account</h4>
<div class="input-section">
<label>First Name <span class="required-color">*</span></label>
<input
type="text"
placeholder="Enter First Name"
id="first-name-input"
required
/>
<span id="first-name-error" class="hide required-color error-message"
>Invalid Input</span
>
<span id="empty-first-name" class="hide required-color error-message"
>First Name Cannot Be Empty</span
>
</div>
<div class="input-section">
<label>Last Name <span class="required-color">*</span></label>
<input
type="text "
placeholder="Enter Last Name"
id="last-name-input"
required
/>
<span id="last-name-error" class="hide required-color error-message"
>Invalid Input</span
>
<span id="empty-last-name" class="hide required-color error-message">
Last Name Cannot Be Empty
</span>
</div>
<div class="input-section">
<label>Email <span class="required-color">*</span></label>
<input type="email" placeholder="Enter Email" id="email" required />
<span id="email-error" class="hide required-color error-message"
>Invalid Email</span
>
<span id="empty-email" class="hide required-color error-message"
>Email Cannot Be Empty</span
>
</div>
<div class="input-section">
<label>Phone <span class="required-color">*</span></label>
<input
type="text"
placeholder="Enter Phone Number"
id="phone"
required
/>
<span id="phone-error" class="hide required-color error-message"
>Phone Number Should Have 10 Digits</span
>
<span id="empty-phone" class="hide required-color error-message">
Phone cannot be empty
</span>
</div>
<div class="input-section">
<label>Password <span class="required-color">*</span></label>
<input
type="password"
placeholder="Enter Password"
id="password"
required
/>
<span id="password-error" class="hide required-color error-message">
Passwords Should Have Letter, Special symbols, Numbers And Length >=
8
</span>
<span id="empty-password" class="hide required-color error-message">
Password Cannot Be Empty
</span>
</div>
<div class="input-section">
<label>Confirm Password <span class="required-color">*</span></label>
<input
type="password"
id="verify-password"
placeholder="Confirm Password"
required
/>
<span
id="verify-password-error"
class="hide required-color error-message"
>Should Be Same As Previous Password</span
>
<span
id="empty-verify-password"
class="hide required-color error-message"
>Password Cannot Be Empty</span
>
</div>
<button id="submit-button">Sign Up</button>
</form>
</div>
<!-- Script -->
<script src="script.js"></script>
</body>
</html>
* {
padding: 0;
margin: 0;
box-sizing: border-box;
font-family: "Poppins", sans-serif;
}
body {
background-color: #3164ff;
}
.container {
width: 90vw;
max-width: 600px;
padding: 2em 1.5em;
background-color: #ffffff;
margin: 1em auto;
border-radius: 0.5em;
}
h4 {
font-size: 1.5em;
}
.input-section {
margin: 0.5em 0;
}
label,
.error-message {
display: block;
font-size: 1em;
}
label {
margin-bottom: 0.5em;
font-weight: 500;
}
.error-message {
margin-top: 0.2em;
}
input,
button {
display: block;
outline: none;
width: 100%;
padding: 0.5em;
border-radius: 0.3em;
}
input {
padding: 1em 0.5em;
border: 1.5px solid #d0d0d0;
}
button {
font-size: 1em;
background-color: #3164ff;
border: none;
color: #ffffff;
padding: 0.8em 0;
margin-top: 2em;
}
.required-color {
color: #ff4747;
}
.error {
border-color: #ff4747;
}
.valid {
border-color: #37a137;
}
.hide {
display: none;
}
@media only screen and (max-width: 450px) {
.container {
font-size: 14px;
}
}
//First Name
let firstNameInput = document.getElementById("first-name-input");
let firstNameError = document.getElementById("first-name-error");
let emptyFirstNameError = document.getElementById("empty-first-name");
//Last name
let lastNameInput = document.getElementById("last-name-input");
let lastNameError = document.getElementById("last-name-error");
let emptyLastNameError = document.getElementById("empty-last-name");
//Phone
let phoneInput = document.getElementById("phone");
let phoneError = document.getElementById("phone-error");
let emptyPhoneError = document.getElementById("empty-phone");
//Email
let emailInput = document.getElementById("email");
let emailError = document.getElementById("email-error");
let emptyEmailError = document.getElementById("empty-email");
//Password
let passwordInput = document.getElementById("password");
let passwordError = document.getElementById("password-error");
let emptyPasswordError = document.getElementById("empty-password");
//Verify Password
let verifyPasswordInput = document.getElementById("verify-password");
let verifyPasswordError = document.getElementById("verify-password-error");
let emptyVerifyPasswordError = document.getElementById("empty-verify-password");
//Submit
let submitButton = document.getElementById("submit-button");
//Valid
let validClasses = document.getElementsByClassName("valid");
let invalidClasses = document.getElementsByClassName("error");
//Password Verification
const passwordVerify = (password) => {
const regex =
/^(?=.+[a-z])(?=.+[A-Z])(?=.+[0-9])(?=.+[\$\%\^\&\!@\#\*\(\)\+\=`~\?\>\<])/;
return regex.test(password) && password.length >= 8;
};
//Text verification (if input contains only text)
const textVerify = (text) => {
const regex = /^[a-zA-Z]{3,}$/;
return regex.test(text);
};
//Phone number verification
const phoneVerify = (number) => {
const regex = /^[0-9]{10}$/;
return regex.test(number);
};
//Email verification
const emailVerify = (input) => {
const regex = /^[a-z0-9_]+@[a-z]{3,}\.[a-z\.]{3,}$/;
return regex.test(input);
};
//For empty input - accepts(input,empty error for that input and other errors)
const emptyUpdate = (
inputReference,
emptyErrorReference,
otherErrorReference
) => {
if (!inputReference.value) {
//input is null/empty
emptyErrorReference.classList.remove("hide");
otherErrorReference.classList.add("hide");
inputReference.classList.add("error");
} else {
//input has some content
emptyErrorReference.classList.add("hide");
}
};
//For error styling and displaying error message
const errorUpdate = (inputReference, errorReference) => {
errorReference.classList.remove("hide");
inputReference.classList.remove("valid");
inputReference.classList.add("error");
};
//For no errors
const validInput = (inputReference) => {
inputReference.classList.remove("error");
inputReference.classList.add("valid");
};
//First name
firstNameInput.addEventListener("input", () => {
if (textVerify(firstNameInput.value)) {
//If verification returns true
firstNameError.classList.add("hide");
validInput(firstNameInput);
} else {
//for false
errorUpdate(firstNameInput, firstNameError);
//empty checker
emptyUpdate(firstNameInput, emptyFirstNameError, firstNameError);
}
});
//Last name
lastNameInput.addEventListener("input", () => {
if (textVerify(lastNameInput.value)) {
lastNameError.classList.add("hide");
validInput(lastNameInput);
} else {
errorUpdate(lastNameInput, lastNameError);
emptyUpdate(lastNameInput, emptyLastNameError, lastNameError);
}
});
//Phone
phoneInput.addEventListener("input", () => {
if (phoneVerify(phoneInput.value)) {
phoneError.classList.add("hide");
validInput(phoneInput);
} else {
errorUpdate(phoneInput, phoneError);
emptyUpdate(phoneInput, emptyPhoneError, phoneError);
}
});
//Email
emailInput.addEventListener("input", () => {
if (emailVerify(emailInput.value)) {
emailError.classList.add("hide");
validInput(emailInput);
} else {
errorUpdate(emailInput, emailError);
emptyUpdate(emailInput, emptyEmailError, emailError);
}
});
//Password
passwordInput.addEventListener("input", () => {
if (passwordVerify(passwordInput.value)) {
passwordError.classList.add("hide");
validInput(passwordInput);
} else {
errorUpdate(passwordInput, passwordError);
emptyUpdate(passwordInput, emptyPasswordError, passwordError);
}
});
//Verify password
verifyPasswordInput.addEventListener("input", () => {
if (verifyPasswordInput.value === passwordInput.value) {
verifyPasswordError.classList.add("hide");
validInput(verifyPasswordInput);
} else {
errorUpdate(verifyPasswordInput, verifyPasswordError);
emptyUpdate(passwordInput, emptyVerifyPasswordError, verifyPasswordError);
}
});
//Submit button
submitButton.addEventListener("click", () => {
if (validClasses.length == 6 && invalidClasses.length == 0) {
alert("Success");
} else {
alert("Error");
}
});
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.