Как очистить файл от недействительных адресов электронной почты - PullRequest
0 голосов
/ 13 апреля 2011

Я ищу сценарий или что-то, что получит CSV-файл в качестве вклада. Он будет анализировать файл построчно и проверять, содержит ли текущая строка действительный адрес электронной почты (например, user@domain.ext)

Я думаю, это уже где-то должно существовать.

Локальный HTML-файл с некоторыми javascript / jquery был бы идеальным.

Это необходимо для проверки списков с введенными вручную электронными письмами без проверки.

Спасибо Michel

Ответы [ 4 ]

0 голосов
/ 15 апреля 2011

Здравствуйте и спасибо за ваши ответы. В конце концов мне удалось сделать это с помощью локального файла HTML и JavaScript. Вот метод:

  1. Есть локальный веб-сервер (например, xampp)
  2. Создайте HTML-файл, который будет использовать jquery (например) для загрузки CSV-файла в AJAX
  3. Разделить загруженный файл по символу \ n (новая строка) на массив
  4. Обрабатывать каждый элемент массива в соответствии с тем, что необходимо (снова разделить на ";" и т. Д.)
  5. Заполните два поля textarea: одно с действительным адресом электронной почты, другое с недействительными
  6. Исправление или удаление адресов вручную из недействительных текстовых сообщений
  7. Копировать / передать действительное текстовое поле в новый чистый файл

Чтобы он работал, я помещаю файл CSV рядом с файлом HTML, затем использую «input type = file» для его загрузки

И вуаля: -)

Необработанный код:

<!DOCTYPE html>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Validation email</title>
<script src="jquery.js"></script>
<script>
function isValidEmailAddress(emailAddress) {
var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
return pattern.test(emailAddress);
};


function no_accent (my_string) {
    var new_string = "";
    var pattern_accent         = new Array('À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','ý','þ','ÿ');
    var pattern_replace_accent = new Array('A','A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','D','N','O','O','O','0','O','O','U','U','U','U','Y','b','s','a','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','d','n','o','o','o','o','o','o','u','u','u','u','y','y','b','y');
    if (my_string && my_string!= "") {
        new_string = preg_replace (pattern_accent, pattern_replace_accent, my_string);
    }
    return new_string;
}

$(document).ready(function() {
    $('#checkMail').click(function() {

    $('#invalid').val('');
      $('#valid').val('');

      $.ajax({
        type: "GET",
        url: $('#fileName').val(),
        dataType: "text",
        cache:false,
        success: function(text) {
          alert("Start process");
          var reg=new RegExp("\r\n", "g");
          var monTab = text.split(reg);

          for (cpt=0;cpt<monTab.length;cpt++){


//do some custom check here if needed

                if (isValidEmailAddress(monTab[cpt])){
                    //add to valid textarea
                    document.getElementById('valid').value += monTab[cpt] + "\r\n";
                } else {
                    //add to invalid textarea
                    document.getElementById('invalid').value += monTab[cpt] + "\r\n";
                }
            }
          alert("Process over!");
        }
      });//close $.ajax 
    });
});

</script>
</head>
<body>
<input type="file" name="myfile" size="50" id="fileName"> (put csv file next to this html file)<br/>
<input type="button" value="Process" id="checkMail">
<br/>
Invalid adresses : <br/>
<textarea id="invalid" cols="80" rows="20"></textarea>
<br/>
Valid adresses : <br/>
<textarea id="valid" cols="80" rows="20"></textarea>
</body>
</html>
0 голосов
/ 13 апреля 2011

1) Имейте в виду, что проверка адресов электронной почты чрезвычайно сложна.На самом деле это невозможно сделать идеально.Это компромисс между сложностью выражения, охватом и точностью (ложные срабатывания).См. Множество других вопросов о проверке адресов электронной почты в SO, а также см. Здесь: http://www.regular -expressions.info / email.html

2) У вас плоский файл(CSV).Вы не можете прочитать это с помощью JavaScript и обработать в браузере.Вам нужно взглянуть на другой язык.В Perl и Java для случайного упоминания двух языков есть хорошая поддержка регулярных выражений.

0 голосов
/ 14 апреля 2011

Так как вы искали решение Javascript, вот несколько простых JS, предполагающих, что у вас есть файл, содержащий данные csv, такие как:

<code><pre id="csv">
a,b,567@noe.invalid!tld
1,2,me@example.net
4,5,so@ex.com

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

var separator = ',',
    linebreak = '\n',
    regex = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,
    csv = document.getElementById('csv'),
    lines = csv.innerHTML.split(linebreak),
    fields,
    i;

for(i = 0; i < lines.length; i++)
{
    fields = lines[i].split(separator);
    if (regex.test(fields[mailColumn]))
    {
        document.write(fields[mailColumn] + ' is valid<br/>');
    }
}
0 голосов
/ 13 апреля 2011

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

#!/usr/bin/ruby
File.open("somefile.csv").each{ |line|
    if line =~ /\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6}/
        puts "Good email!"
    else
        puts "FAIL"
    end
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...