【问题标题】:How to clean an file from invalid e-mail adresses如何从无效的电子邮件地址中清除文件
【发布时间】:2011-04-13 12:38:36
【问题描述】:

我正在寻找可以将 csv 文件作为输入的脚本或其他东西。 它将逐行解析文件并检查当前行是否包含有效的电子邮件(例如:user@domain.ext)

我认为这一定已经存在于某个地方。

带有一些 javascript/jquery 的本地 html 文件将是完美的。

我需要这个来检查没有验证的手动输入的电子邮件列表。

谢谢 米歇尔

【问题讨论】:

  • 网页不是这样,也许你想用Windows Scripting代替?
  • 我不认为 JavaScript 是最好的工具。也许,像 PHP 这样的服务器端脚本会更好。

标签: javascript email-validation


【解决方案1】:

您将无法使用 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
}

【讨论】:

    【解决方案2】:

    1) 请注意,验证电子邮件地址非常困难。事实上,不可能做到完美。这是表达式复杂性、覆盖率和准确性(误报)之间的权衡。在 SO 上查看有关验证电子邮件地址的无数其他问题,也可以在此处查看:http://www.regular-expressions.info/email.html

    2) 您有一个平面文件 (.csv)。您无法使用 javascript 阅读此内容并在浏览器中进行处理。您需要查看其他语言。 Perl 和 Java 随便提两种语言都有很好的正则表达式支持。

    【讨论】:

      【解决方案3】:

      由于您寻找的是 Javascript 解决方案,因此这里有一些普通的 JS,假设您有一些包含 csv 数据的文件,如下所示:

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

      这是您可能想要替换分隔符、使用的换行符或用于检查地址的正则表达式的脚本。根据您的验证要求,请在此处查找其他正则表达式:Validate email address in 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/>');
          }
      }
      

      【讨论】:

        【解决方案4】:

        您好,感谢您的回答。 我最终设法使用本地 html 文件和 javascript 来做到这一点。 方法如下:

        1. 拥有本地网络服务器(如 xampp)
        2. 创建一个 html 文件,该文件将使用 jquery(例如)在 AJAX 中加载 csv 文件
        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>
        

        【讨论】:

          猜你喜欢
          • 2019-12-17
          • 1970-01-01
          • 2012-12-12
          • 2011-09-17
          • 1970-01-01
          • 2017-01-10
          • 2013-02-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多