Skip to content

Commit a826bf3

Browse files
added username validation on clientside
1 parent 3f25a2a commit a826bf3

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

client/src/components/Auth/user-auth-form-signup.tsx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,26 @@ export function UserAuthForm({ className, ...props }: UserAuthFormProps) {
2121
const [isUsernameAvailable, setIsUsernameAvailable] = useState<boolean | null>(null);
2222
const [email, setEmail] = useState<string>('');
2323
const [password, setPassword] = useState<string>('');
24+
const [usernameError, setUsernameError] = useState<string>('');
2425
const navigate = useNavigate(); // Hook for navigation
2526

2627
useEffect(() => {
2728
const checkUsernameAvailability = async () => {
2829
if (username) {
2930
try {
31+
if((username.match(/^[a-zA-Z0-9]+$/))===null){
32+
setUsernameError('Username must be alphanumeric');
33+
return;
34+
}
35+
else if(!(username.length>7)){
36+
setUsernameError('Username must be greater than 7 characters');
37+
return;
38+
}
39+
else if(!(username.length<12)){
40+
setUsernameError('Username must be less than 12 characters');
41+
return;
42+
}
43+
setUsernameError('')
3044
const response = await axios.get(`${backendUrl}/check_username`, {
3145
params: { username }
3246
});
@@ -36,6 +50,7 @@ export function UserAuthForm({ className, ...props }: UserAuthFormProps) {
3650
}
3751
} else {
3852
setIsUsernameAvailable(null);
53+
setUsernameError('');
3954
}
4055
};
4156

@@ -110,6 +125,9 @@ export function UserAuthForm({ className, ...props }: UserAuthFormProps) {
110125
{isUsernameAvailable === true && (
111126
<p className="text-green-500">Username is available</p>
112127
)}
128+
{
129+
usernameError && <p className="text-red-500">{usernameError}</p>
130+
}
113131
</div>
114132
<div className="grid gap-1">
115133
<Label className="sr-only" htmlFor="email">

0 commit comments

Comments
 (0)