Regex: как сопоставить список конкретных доменов

0

Мне нужно регулярное выражение, которое будет соответствовать определенному списку доменов в адресах электронной почты. Я знаю, что это, вероятно, не популярная проблема, но она используется для внутреннего использования и для ограниченного списка адресов электронной почты. У меня есть 10-12 доменов, которые мне нужно для соответствия.

Доменные имена не содержат поддоменов или точек, а суффикс всегда один и тот же:

*@onedomain.com
*@anotherdomain.com
*@thirddomain.com

Я пробовал с этим:

/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@(?i)(onedomain|anotherdomain|thirddomain|domain4)\.com$/

Но я получаю эту ошибку: Недопустимый синтаксис. Может ли кто-нибудь помочь с этим, пожалуйста? Благодарю.

  • 0
    Какой язык вы используете? Я не вижу никакой синтаксической ошибки в этом регулярном выражении.
  • 0
    Javascript / jQuery - я использую регулярное выражение в плагине JQuery Validate.
Теги:

4 ответа

2
Лучший ответ

Кажется, вы не можете использовать (?i) с регулярным выражением javascript.

Вместо этого вы должны использовать модификатор /i.

pattern = new RegExp('^[\w-]+(\.[\w-]+)*@(onedomain|anotherdomain|thirddomain|domain4)\.com$','i')
  • 0
    Точно, спасибо.
  • 0
    @Meek: пожалуйста.
1

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

Вместо этого вы можете использовать регулярное выражение для соответствия базовому формату электронной почты, а затем сохранить массив разрешенных доменов. Таким образом, вам не нужно помещать все домены в само выражение.

function isValidEmail(address) {
    var domains = ["onedomain","anotherdomain","thirddomain","domain4"];

    // Basic .com email matching
    var regex = /^[\w-]+(?:\.[\w-]+)*@(.*)\.com$/i;
    var matches = regex.exec(email);

    // Assert that address is an .com email address 
    if (matches === null)
        return false;

    // return true if domain is in whitelist, false otherwise
    return (domains.indexOf(matches[1]) != -1);
}

Изменение @(.*)\.com на @(.*\..{2,}) позволит вам поместить полный домен в массив белых списков, если вам нужно совместить другие домены, чем .com, тогда вам придется вместо этого domain4.com и т.д.

  • 0
    Это тоже хорошо.
0

Если проблема связана с регулярным выражением, вы можете попробовать следующее:

/^[\w-\.]+@domain(1|2|3|4)\.com$/

О вашем регулярном выражении: Я думаю, синтаксическая ошибка находится в части (?i). Я действительно не понимаю, для чего предназначена эта группа, и она недействительна.

  • 0
    Благодарю. Я пытался сделать это НЕ чувствительным к регистру.
  • 0
    @ Понятно. Чтобы сделать ваше регулярное выражение нечувствительным к регистру, вы должны добавить i в конце, например: /pattern/i . В своем регулярном выражении я использовал \ w, который не чувствителен к регистру. Я надеюсь, что это ответит на ваш вопрос!
0

Попробуйте это регулярное выражение для соответствия @domainX.com:

[A-Za-z0-9!#$%&*+-/=?^_'\.{|}~]+@domain[1-4]\.com

он соответствует

[email protected]
[email protected]

и многое другое

РЕДАКТИРОВАТЬ

для соответствия каждому домену это регулярное выражение:

[A-Za-z0-9!#$%&*+-/=?^_'\.{|}~]+@([a-z0-9_-]+[\.]?)*
  • 0
    Благодарю. Домены не обязательно должны иметь номера 1-4 в своих именах - это был только пример. Доменные имена будут другими. Сожалею.
  • 0
    хорошо, взгляни на мою правку. Это регулярное выражение также позволяет поддоменов
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню