2014-10-15 3 views
0

У меня есть сценарий проверки подлинности электронной почты на стороне клиента Javascript + RegEx, он отлично работает, но я хочу исключить определенные домены во время проверки, а именно все домены Apple, поскольку они не работают (электронные письма отправленные на эти адреса, удаляются без предупреждения): @ apple.com, @ me.com, @ icloud.com, @ mac.com.Проверка электронной почты Javascript + RegEx, но для исключения определенных доменов

Здесь я нашел подходящие вопросы, но все же они не то же самое Я прошу о помощи. Пожалуйста, помогите это реализовать

Можно ли это сделать с помощью модификации RegEx, или мне нужно использовать подстроки цикла и поиска (@ apple.com, @ me.com, @ icloud.com, @ mac.com) после основная проверка электронной почты выполнена?

function verifyMe(){ 
 
var msg=''; 
 

 
var email=document.getElementById('email').value; 
 
if(!(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email)) || 
 
document.getElementById('email').value=='') 
 
{ 
 
msg+='- Invalid Email Address: '+email+'\n\n'; 
 
document.getElementById('Eemail').style.color='#ffffff'; 
 
} 
 
else 
 
document.getElementById('Eemail').style.color='#bbb' 
 
    
 
if(msg!='') 
 
return false; 
 
else 
 
{ 
 
search_code(); //it's ok go ahead 
 
return true; 
 
} 
 
}

+0

Не могли бы вы поделиться своими попытками и рассказать нам, почему они не сработали для вас? – PeeHaa

+0

Я не уверен, какой подход использовать - RegEx mod или loop для поиска подстроки? так как я хочу исключить массив доменов, а не один домен. Я потерялся с RegEx –

+0

Возможно, проанализируйте с помощью [правильный парсер адресов электронной почты] (https://www.npmjs.org/package/email-addresses) вместо того, чтобы пытаться использовать регулярные выражения. Правильное правое правило будет сложно. Например, 'FOO @ APPLE.COM' эквивалентно' FOO @ apple.com', поскольку имена хостов не чувствительны к регистру, а 'FOO @ apple.com.' также действителен, но просто говорит, что' apple.com' не должен разрешается с использованием списка поиска суффиксов. –

ответ

1

Оба подхода будут работать.

Для регулярных выражений один, просто вставить следующую часть после @ в регулярном выражении (отрицательное опережение):

(?!(?:apple|me|icloud|mac)\.com$) 

Но лучше регулярное выражение в целом будет:

^\w+[-\.\w]*@(?!(?:apple|me|icloud|mac)\.com$)\w+[-\.\w]*?\.\w{2,4}$ 

Для других подход должен работать следующим образом:

function isValidMailAddress(email) { 
    var match = /^\w+[-\.\w]*@(\w+[-\.\w]*?\.\w{2,4})$/.exec(email); 
    if (!match) 
     return false; 

    var forbiddenDomains = ["apple.com", "me.com", "icloud.com", "mac.com"]; 
    if (forbiddenDomains.indexOf(match[1].toLowerCase()) >= 0) 
     return false; 

    return true; 
} 

Это зависит от вас, чтобы решить, какие вы чувствуете себя наиболее комфортно.

+0

Лукас благодарит вас за вашу помощь –

0

Вы можете использовать jQuery.inArray() для проверки адреса электронной почты с определенным доменным именем.

var email ="[email protected]" 
var str = email.split('@').slice(1); 
var allowedDomains = ['xyz.edu.au','abc.edu.au']; 

if($.inArray(str[0], allowedDomains) === -1) { 
    alert('email is allowed.'); 
} 
else{ 
    alert('email not allowed.'); 
} 
Смежные вопросы