Выполняю проверки полей на стороне клиента на пробелы, на лишние символы и тд, в случае одного не совпадения форма не отправляется. Но при fetch запросе на наличие пользователя с данным логином все отрабатывает верно, но все равно форма отправляется. Почему так? я понимаю что проблема в том что fetch запрос асинхронный, но все равно победить это не могу.
<script>
function validateForm() {
const userName = document.getElementById("userName").value;
const password = document.getElementById("password").value;
const confirmPassword = document.getElementById("confirmPassword").value;
const firstName = document.getElementById("firstName").value;
const lastName = document.getElementById("lastName").value;
let rc = true;
fetch('/registration/check-username?userName=' + userName)
.then(response => response.json())
.then(data => {
if (!data) {
alert("Пользователь с таким логином уже существует");
rc = false;
}
});
if (userName.includes(" ") || password.includes(" ") || confirmPassword.includes(" ")
|| firstName.includes(" ") || lastName.includes(" ")) {
alert("Строки не могут содержать пробелы");
rc = false;
}
const regex1 = /^[A-Za-z0-9]+$/;
if (!(regex1.test(userName) && regex1.test(password) && regex1.test(confirmPassword))) {
alert("Логин и пароль могут содержать только английские символы и цифры");
rc = false;
}
const regex2 = /^[А-Яа-я]+$/;
if (!(regex2.test(firstName) && regex2.test(lastName))) {
alert("Имя и фамилия могут содержать только русские буквы");
rc = false;
}
if (password !== confirmPassword) {
alert("Введенные пароли не совпадают");
rc = false;
}
return rc;
}
</script>