Вы используете .match()
, который будет возвращать массив совпадающих подстрок в вашем регулярном выражении.Это не логическое значение.Запустите этот пример, чтобы увидеть:
var regex =/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
console.log("bob@aol.com".match(regex));
Что вы хотите вместо этого, если вы используете .test()
, который вернет логическое значение, если оно соответствует или нет.
var regex =/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
console.log(regex.test("bob@aol.com"));
console.log(regex.test("banana"));
РЕДАКТИРОВАТЬ:
Для ясности, это то, что ваш код должен быть.Я добавил несколько отладочных вызовов console.log
, чтобы помочь вам понять, что происходит.Я немного изменил HTML только для того, чтобы заставить эту демонстрацию работать.Нажмите кнопку «Выполнить фрагмент кода».
$('.email').blur(function() {
var regex = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
var isEmailCorrect = regex.test(this.value);
console.log('Email Value:', this.value);
console.log('Is Email Correct:', isEmailCorrect);
$('.modal:visible').find('.popemail').toggleClass('hide', isEmailCorrect);
$('.sub').prop('disabled', !isEmailCorrect);
});
.hide{display:none;}
.popover-email{color: red;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="modal">
<label for="email">Email</label>
<input type="email" id="email" class="email" name="email" placeholder="Email">
<span id="popover-email" class="hide popemail">Please use the proper format of an email</span>
</div>