Мне нужно регулярное выражение, которое будет соответствовать определенному списку доменов в адресах электронной почты. Я знаю, что это, вероятно, не популярная проблема, но она используется для внутреннего использования и для ограниченного списка адресов электронной почты. У меня есть 10-12 доменов, которые мне нужно для соответствия.
Доменные имена не содержат поддоменов или точек, а суффикс всегда один и тот же:
*@onedomain.com
*@anotherdomain.com
*@thirddomain.com
Я пробовал с этим:
/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@(?i)(onedomain|anotherdomain|thirddomain|domain4)\.com$/
Но я получаю эту ошибку: Недопустимый синтаксис. Может ли кто-нибудь помочь с этим, пожалуйста? Благодарю.
Кажется, вы не можете использовать (?i)
с регулярным выражением javascript.
Вместо этого вы должны использовать модификатор /i
.
pattern = new RegExp('^[\w-]+(\.[\w-]+)*@(onedomain|anotherdomain|thirddomain|domain4)\.com$','i')
Я знаю, что вы запросили решение для регулярных выражений, но если список доменов длинный, вам может потребоваться не делать это чисто в регулярном выражении. 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
и т.д.
Если проблема связана с регулярным выражением, вы можете попробовать следующее:
/^[\w-\.]+@domain(1|2|3|4)\.com$/
О вашем регулярном выражении: Я думаю, синтаксическая ошибка находится в части (?i)
. Я действительно не понимаю, для чего предназначена эта группа, и она недействительна.
/pattern/i
. В своем регулярном выражении я использовал \ w, который не чувствителен к регистру. Я надеюсь, что это ответит на ваш вопрос!
Попробуйте это регулярное выражение для соответствия @domainX.com:
[A-Za-z0-9!#$%&*+-/=?^_'\.{|}~]+@domain[1-4]\.com
он соответствует
[email protected]
[email protected]
и многое другое
РЕДАКТИРОВАТЬ
для соответствия каждому домену это регулярное выражение:
[A-Za-z0-9!#$%&*+-/=?^_'\.{|}~]+@([a-z0-9_-]+[\.]?)*