2011-04-13 2 views
0

Je cherche un script ou quelque chose qui obtiendrait un fichier csv comme imput. Il analyserait le fichier ligne par ligne et vérifierait si la ligne courante contient un email valide (par exemple: [email protected])Comment nettoyer un fichier à partir d'adresses e-mail invalides

Je pense que cela doit déjà exister quelque part.

Un fichier html local avec du javascript/jquery serait parfait.

J'ai besoin de ceci pour vérifier les listes avec des courriels entrés manuellement sans vérification.

Merci Michel

+0

page Web est pas la façon, peut-être vous voulez faire avec [Windows Scripting] (http://msdn.microsoft.com/en-us/library/czxefwt8 (v = vs.85) .aspx) au lieu? –

+0

Je ne pense pas que JavaScript soit le meilleur outil pour cela. peut-être, un script côté serveur comme PHP serait mieux. – kjy112

Répondre

0

Vous ne serez pas en mesure de lire ou d'écrire des fichiers locaux avec javascript, je l'ai écrit cela en rubis. Si le code ne vous est pas utile, l'expression régulière le sera peut-être.

#!/usr/bin/ruby 
File.open("somefile.csv").each{ |line| 
    if line =~ /\[email protected][a-zA-Z_]+?\.[a-zA-Z]{2,6}/ 
     puts "Good email!" 
    else 
     puts "FAIL" 
    end 
} 
0

1) Soyez averti que la validation des adresses e-mail est extrêmement difficile. En fait, il est impossible de faire parfaitement. C'est un compromis entre la complexité de l'expression, la couverture et la précision (faux positifs). Voir les zillions d'autres questions sur SO sur la validation des adresses e-mail, et voir aussi ici: http://www.regular-expressions.info/email.html

2) Vous avez un fichier plat (.csv). Vous ne pouvez pas lire ceci avec javascript et le traiter dans un navigateur. Vous aurez besoin de regarder une autre langue. Perl et Java pour désigner aléatoirement deux langues ont un bon support de regex.

0

Puisque vous cherché une solution Javascript, voici quelques JS plaine supposant que vous avez un fichier contenant les données csv comme ceci:

<pre id="csv"> 
a,b,[email protected]!tld 
1,2,[email protected] 
4,5,[email protected] 
</pre> 

Voici le script où vous pouvez remplacer le seperator, la linebreaks utilisés ou l'expression régulière pour vérifier les adresses. En fonction de vos besoins de validation ont chercher d'autres expressions régulières ici: 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/>'); 
    } 
} 
0

Bonjour et merci pour vos réponses. J'ai finalement réussi à le faire avec un fichier html local et javascript. Voici la méthode:

  1. d'un serveur web local (comme xampp)
  2. Créer un fichier HTML qui utilisera jquery (par exemple) pour charger le fichier csv en AJAX
  3. de Split le fichier chargé sur le caractère \ n (nouvelle ligne) dans un tableau
  4. Traite chaque élément de tableau en fonction de ce qui est nécessaire (diviser à nouveau ";")
  5. Remplir deux champs textarea: une avec adresse e-mail valide, l'autre avec les invalides
  6. manuellement corriger ou supprimer les adresses de textarea invalide
  7. Copier/Passé la zone de texte valide pour un nouveau fichier propre

afin d'avoir fonctionner, je place le fichier csv à côté du fichier html, puis-je utiliser un « input type = fichier » pour le charger

Et le tour est joué :-)

Code Raw:

<!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> 
Questions connexes