Метод test () возвращает логическое значение, вы можете сократить if if только до оператора return.
Ваше регулярное выражение заключено в необязательную группу ()?
, поэтому также будет соответствовать пустая строка.
Если вам не нужна группа захвата, вы можете изменить эту часть ([\w-]+.)+
на (?:[\w-]+\.)+
и избежать точки.
Вы можете обновить свое регулярное выражение до:
^[\w-.]+@(?!(?:(?:hot|g)mail|yahoo|test)\.com)(?:[\w-]+\.)+\w{2,4}$
См. Демоверсию Regex
Например, если адрес электронной почты совпадает с адресом gmail и т. Д. После знака @, он вернет true:
$.validator.addMethod('checkDomain', function (value) {
return !/^[\w-.]+@(?!(?:(?:hot|g)mail|yahoo|test)\.com)(?:[\w-]+\.)+\w{2,4}$/.test(value);
}, 'Please provide a business email.');
function checkDomain(value) {
return !/^[\w-.]+@(?!(?:(?:hot|g)mail|yahoo|test)\.com)(?:[\w-]+\.)+\w{2,4}$/.test(value);
}
const strings = [
"test@test.co",
"test@test.com",
"test@hotmail.com",
"test@gmail.com"
];
strings.forEach(s => console.log(`${s}: ${checkDomain(s)}`));
Объяснение
^
Начало строки
[\w-.]+
Соответствует 1+ раз одному из символов слова, дефиса или точки
@
Совпадение буквально
(?!
Отрицательный взгляд вперед, чтобы проверить, что следует не
(?:(?:hot|g)mail|yahoo|test)\.com
Группа без захвата с чередованием
)
Закрыть негативный взгляд
(?:[\w-]+\.)+
Повторите совпадение 1+ раз один из символов слова или дефиса, за которым следует точка
\.\w{2,4}
Совпадение точки и символов из 2-4 слов
$
Конец строки