Skip to content

Commit c15a025

Browse files
authored
Merge pull request #93 from rishabh7923/beta
Added Validation At Register Page
2 parents e889511 + 42ee0e0 commit c15a025

File tree

2 files changed

+98
-6
lines changed

2 files changed

+98
-6
lines changed

server/routes/admin.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,19 @@ router.post('/register', async (req, res) => {
222222
return res.redirect('/register'); // Change to '/register'
223223
}
224224

225+
if (!/^[a-zA-Z0-9]+$/.test(username) || username.length < 3) {
226+
req.flash('error', 'Username must be at least 3 characters long and contain only alphanumeric characters.');
227+
return res.redirect('/register');
228+
}
229+
230+
if (password.length < 8 || !/\d/.test(password) || !/[!@#$%^&*]/.test(password)) {
231+
req.flash('error', 'Password must be at least 8 characters long, contain a number, and a special character.');
232+
return res.redirect('/register');
233+
}
234+
225235
try {
226236
const existingUser = await User.findOne({ username });
237+
227238
if (existingUser) {
228239
req.flash('error', 'Username already taken');
229240
return res.redirect('/register'); // Change to '/register'

views/admin/register.ejs

Lines changed: 87 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,92 @@
11
<h3>Register</h3>
2-
<form action="/register" method="POST">
3-
<label for="username"><b>Username</b></label>
4-
<input type="text" placeholder="Enter Username" name="username" required>
2+
<form action="/register" method="POST" >
3+
<div>
4+
<div>
5+
<label for="username" style="font-weight: bold;">Username</label>
6+
<input type="text" placeholder="Enter Username" name="username" required id="username"
7+
style="margin: 0; width: 100%;">
8+
<div id="usernameError" style="color: red; display: none; width: 100%;"></div>
9+
<!-- Error message container for username -->
10+
</div>
11+
12+
<div>
13+
<label for="password" style="font-weight: bold;">Password</label>
14+
<input type="password" placeholder="Enter Password" name="password" required id="password"
15+
style="margin: 0; width: 100%;">
16+
<div id="passwordError" style="color: red; display: none; width: 100%;"></div>
17+
<!-- Error message container for password -->
18+
</div>
19+
20+
<div style="display: flex; justify-content: flex-start;">
21+
<input type="submit" value="Register" class="btn">
22+
</div>
23+
</div>
524

6-
<label for="password"><b>Password</b></label>
7-
<input type="password" placeholder="Enter Password" name="password" required>
825

9-
<input type="submit" value="Register" class="btn">
1026
</form>
1127

28+
29+
<style>
30+
form>div {
31+
display: flex;
32+
flex-direction: column;
33+
align-items: flex-start;
34+
width: 100%;
35+
gap: 1rem;
36+
}
37+
38+
form>div div {
39+
display: flex;
40+
flex-direction: column;
41+
align-items: flex-start;
42+
width: 100%;
43+
}
44+
</style>
45+
46+
<script>
47+
function validateForm() {
48+
const isUsernameValid = validateUsername();
49+
const isPasswordValid = validatePassword();
50+
return isUsernameValid && isPasswordValid; // Allow form submission only if both are valid
51+
}
52+
53+
function validateUsername() {
54+
const username = document.getElementById('username').value;
55+
const usernameError = document.getElementById('usernameError');
56+
const minLength = 3; // Minimum length for username
57+
58+
// Clear previous error message
59+
usernameError.style.display = 'none';
60+
usernameError.textContent = '';
61+
62+
if (username.length < minLength || !/^[a-zA-Z0-9]+$/.test(username)) {
63+
usernameError.textContent = 'Username must be at least 3 characters long and contain only alphanumeric characters.';
64+
usernameError.style.display = 'block'; // Show error message
65+
return false; // Invalid username
66+
}
67+
return true; // Valid username
68+
}
69+
70+
function validatePassword() {
71+
const password = document.getElementById('password').value;
72+
const passwordError = document.getElementById('passwordError');
73+
const minLength = 8;
74+
const hasNumber = /\d/;
75+
const hasSpecialChar = /[!@#$%^&*]/;
76+
77+
// Clear previous error message
78+
passwordError.style.display = 'none';
79+
passwordError.textContent = '';
80+
81+
if (password.length < minLength || !hasNumber.test(password) || !hasSpecialChar.test(password)) {
82+
passwordError.textContent = 'Password must be at least 8 characters long, contain a number, and a special character.';
83+
passwordError.style.display = 'block'; // Show error message
84+
return false; // Prevent form submission
85+
}
86+
return true; // Allow form submission
87+
}
88+
89+
// Add event listeners for real-time validation
90+
document.getElementById('username').addEventListener('input', validateUsername);
91+
document.getElementById('password').addEventListener('input', validatePassword);
92+
</script>

0 commit comments

Comments
 (0)