Понимание, если проверка регулярных выражений в Jquery Validate - PullRequest
0 голосов
/ 14 января 2019

Я создаю новый метод и пытаюсь убедиться, что у меня правильная логика и как я читаю то, что я пишу здесь.

$.validator.addMethod('checkDomain', function (value) { 

    if(/^([\w-.]+@(?!gmail\.com)(?!yahoo\.com)(?!hotmail\.com)(?!test\.com)([\w-]+.)+[\w-]{2,4})?$/.test(value)) {
            return false;  // FAIL validation when REGEX matches    
            }
        else {
            return true;   // PASS validation otherwise
        }

}, 'Please provide a business email.');

То, что я пытаюсь здесь сказать, это то, что если адрес электронной почты совпадает, например, с gmail, установите значение false, поскольку мы этого не хотим. Хотя, когда я установил это в ложь, это задом наперед. Я выключил свое регулярное выражение? Будет ли возвращено значение true, если оно соответствует одному из доменов электронной почты?

1 Ответ

0 голосов
/ 17 января 2019

Метод 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 слов
  • $ Конец строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...