#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();
Рабочий пример:
Комментарии:
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