const usernameCheck = async (username) => { if (username.length > 0) { let res = await fetch(`/auth/username?username=${username}`); const data = await res.json(); // return true if username is available return data.results === false; } }; const emailCheck = async (email) => { if (email.length > 0) { let res = await fetch(`/auth/email?email=${email}`); const data = await res.json(); return data.results === false; } }; const isDataValid = async (e, callback) => { let test = await callback(e.target.value); test ? (e.target.style.border = '3px green solid') : (e.target.style.border = 'red solid 3px'); }; const passwordValid = () => { const password = document.querySelector('#password'); const passwordConfirmation = document.querySelector( '#password-confirmation', ); const passwordConfirmationCheck = (value) => { return password.value === value; }; const passwordValidityCheck = (password) => { if (!/\d/.test(password)) return false; if (!/[\!@#%\^&\*\(\)\_\+\-=\[\]{}\|;':",\.\/\<\>\~\`]/.test(password)) return false; if (password.length < 8) return false; return true; }; password.addEventListener('input', (e) => isDataValid(e, passwordValidityCheck), ); passwordConfirmation.addEventListener('input', (e) => isDataValid(e, passwordConfirmationCheck), ); }; const usernameInput = document.querySelector("input[name='username']"); usernameInput.addEventListener('input', (e) => isDataValid(e, usernameCheck)); const emailInput = document.querySelector("input[name='email']"); emailInput.addEventListener('input', (e) => isDataValid(e, emailCheck)); passwordValid();