проверка электронных писем с помощью jquery

#javascript #jquery #validation

#javascript #jquery #проверка

Вопрос:

у меня есть данные, содержащие электронные письма: шаблон данных похож: first_name last_name email


data = foo bar foo@bar.com, foo baz foo@baz.com,foo foo foo@foo.com,bar@bar.com , bar baz bar@baz.com

Оно может содержать пробелы. Я должен проверить все электронные письма, извлекая данные. Примечание: Между словами могут быть пробелы, так что разделение пробелом дает мне больше нежелательных данных…

 function validate() {
    email_data = data.split(',') // This will get the all data spliting by ','
    for (i = 0; i<email_data.length; i  ) {
        email_new_data = email_data.split(' ')  //spliting data by space

        // Now I could not find the way to extract emails (only ) from data
    }
}
  

Любое предложение будет полезным.. Спасибо

Комментарии:

1. xkcd.com/208 может помочь 🙂

2. Вы имеете в виду » адреса электронной почты», а не «электронные письма»… кроме того, вы действительно имеете в виду «проверять», или вы просто пытаетесь найти или изолировать адреса электронной почты?

Ответ №1:

Следующая функция разбивает основную data строку на массив; который затем может быть проанализирован с помощью RegExp . Насколько я могу судить, вы хотите получить только адрес электронной почты; поэтому мы используем Regular Expression для сопоставления адреса электронной почты. Если оно совпадает, у вас есть действительное электронное письмо. Если нет совпадения; тогда в основном в данном сегменте нет действительного электронного письма.

Пожалуйста, обратите внимание, что Regular Expression проверка электронной почты на 100% успешна, просто невозможна; поскольку RFC просто чрезвычайно сложен, подробнее об этом читайте здесь: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html

 function validate() {
    data = "foo bar foo@bar.com, foo baz foo@baz.com,foo foo foo@foo.com,bar@bar.com , bar baz bar@baz.com";
    email_data = data.split(','); // This will get the all data spliting by ','
    for (i = 0; i < email_data.length; i  ) {
        // Get emails, change console.log to alert if you don't know how to use console.
        console.log(email_data[i].match(/[w._ -] @[w._ -] .[w]{2,6}/));
    }
}
validate();
  

Рабочий пример:

http://jsfiddle.net/kuroir/H7VaT/

Комментарии:

1. Это все еще работает после вашего редактирования; Я получаю адреса электронной почты 🙂 jsfiddle.net/kuroir/H7VaT/3 здесь с предупреждениями для демонстрации.

Ответ №2:

 var email_list = new Array();
var k = 0;

for (j=0; i<email_new_data.length; i  ) {
    if (email_new_data.search('@') != -1) {
        email_list[k  ] = email_new_data;
    }
}
  

Если у вас нет людей с @ на их имя, это должно сработать…
(Это на случай, если у вас есть люди с пробелом в имени / пустой строке имени)

Ответ №3:

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

 var emailpattern = new RegExp("^[a-zA-Z0-9._-] @[a-zA-Z0-9-] .[a-z]{2,4}$");

function validateEmail(email){
    return emailpattern.match(email);
}

function processEmail(emailData){
    emailData = emailData.split(' ');
    var firstName = emailData[0];
    var lastName = emailData[1];
    var email = emailData[2];

    if (validateEmail(email)){
        // Your stuff if valid
    } else {
        // If email is not valid
    }
}

var data = data.split(','); // Whereever you get your data from
for (var i=0; i<data.length; i  ){
    processEmail(data[i]);
}
  

Ответ №4:

Можете ли вы вместо этого проверить это на сервере?

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

Разделение данных и извлечение электронного письма — это простая часть, проверка электронного письма — это то, что будет сложно.

Смотрите здесь: http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx