String (Dateipfad) auf Länge und Leerzeichen überprüfen

Oliabt

New member
Hi Leute, ich hab folgendes Problem:

wir haben ein Uploadtool bei dem man seine Unterschrift von Lokal auf unseren Server hochlädt und nachher dann verwenden kann...

Ich will folgendes:

Der Dateiname darf keine Leerzeichen beinhalten!

Ich hab mir das so gedacht: Da der Pfad ja auf jedenfall leerzeichen enthalten wird (C:\Dokumente und Ei.....usw.) habe ich mir gedacht ich lass mir erstmal die länge des kompletten Pfades ausgeben, durchlaufe den Dateinamen dann von hinten nach vorne in einer schleife durch, zeichen für Zeichen - und sobald er den ersten "\" findet, gibt meine Funktion true zurück und sobald eine Leerzeile gefunden wird, gibbet nen Alert.... Ich denk das is die einfachste und beste lösung...

Mein Problem ist jetzt nur, das mir noch etwas die erfahrung in JS fehlt und ich mich mit den Befehlen noch nicht wirklich auskenne... Deshalb meine fragen:

Wie bekomm ich die Länge von dem Dateipfad raus? Wie kann ich dann die Einzelnen Zeichen prüfen?

Ich hoffe das war einigermaßen verständlich!

Mfg, Oli
 
der pfad aus dem ich hochlade hat ja ncihts mit dem Dateinamen zu tun...und das Hochladen passiert doch sichelrich nciht mit JS...wie wird das denn verwirklicht, dort könnte man beim kopieren der Datei ja direkt die Leerzeichen entfernen...
 
Moin!

Sanchez, Du hast natürlich vollkommen recht. Die Datei kann auf dem Server einen "korrekten" Namen bekommen. Mit JS kannste aber checken, was Du wolltest, Oliabt:
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Beispiel</title>
<script language="JavaScript" type="text/javascript">
<!--
function checkPfad(pfad){
pfad=pfad.split('\\');
pfad=pfad[pfad.length-1];
if(pfad.length!=pfad.replace(/ /g,'').length){
alert('Dateiname darf keine Leerzeichen enthalten!');
return false;
}
}
//-->
</script>
</head>
<body>
<form name="myform" action="#">
<input type="file" name="datei1" value="">
<input type="button" value="click" onclick="checkPfad(this.form.datei1.value)">
</form>
</body>
</html>
Ahoi - Pit
 
Also das ist ja wohl Quatsch, dem Benutzer zu verbieten, wie er denn seine Dateien auf der Platte nennen soll, oder wo er sie abspeichern soll!!

Beim Upload passiert doch folgendes:
Die Datei wird codiert an den Server geschickt, dieser legt sie i.d.R. in einem temporären Verzeichnis mit einem temporären, eindeutigen Namen ab. Dieser Name hat meist nichts mit dem eigentlichen Dateinamen der Quelldatei zu tun. Das entsprechende Script kann dann nach erfolgtem Upload die Datei nehmen und in das korrekte Zielverzeichnis verschieben/kopieren. Dabei kann man ein Name vorgegeben oder den Original Dateinamen, der beim Versenden mitgeliefert wird verwenden. Dieser Originalname enthält dabei lediglich den reinen Dateinamen, d.h. ohne Pfadangaben. Diesen kann man serverseitig bereinigen oder auch komplett neu generieren und lediglich in der Datenbank den alten Namen als Referenz und für die Anzeige speichern.
 
Erstmal danke, werd gleich mal das oben geschriebene skript testen!

@Albu: Da hast du recht, ich finds auch mehr als blödsinnig... die Dateinamen werden nämlich wie du schon sagst bei dem tool eh neu generiert... es wird nämlich die Anzahl der Dateien im Verzeichnis vorangestellt, so nach dem schema:

28_Original_Name.jpg

ich würd das ganze auch lieber anders lösen, aber der Kunde wills nunmal so...

Also ich teste jetz mal das skript!

Merci
 
Vergiß aber bitte nicht, dem Kunden zu sagen, daß ein durchaus nennenswerter Anteil der www-BenutzerInnen Javascript nicht am Start hat und der clientseitige Check dann nicht abläuft. Wenn er Dateinamen ohne Leerzeichen will, dann muß das auf jeden Fall auf dem Server gecheckt werden.

Ahoi - Pit
 
mal ganz ehrlich...dein Kunde kann doch maximal ein Produkt von dir verlangen und dir nicht vorschreiben wie das programmiert sein soll..und da das resultat eh gleich ist, aber bei der einen Möglichkeit (JS) nicht immer funktionieren wird,bei der anderent aber immer verstehe ich nciht was dein Kunde damit bezwecken will...was soll das???
 
Mein Problem ist - ich bin Azubi *G* und zwar im ersten lehrjahr... ob das im endeffekt sinn macht was der kunde will, muss unser Programmierer mit denen auskartelln... ich hab im endeffekt nichts mit dem kunden selber zu tun!

Also das skript funktioniert einwandfrei, danke dafür!

Nur will ich es auch komplett verstehen!
Deshalb meine Frage:
Was bewirkt diese Zeile:

if(pfad.length!=pfad.replace(/ /g,'').length)

komme noch nicht ganz dahinter um ehrlichzusein
 
Also erstmal wird die gesamte Länge des Dateinamens eruiert (pfad.length).
pfad.replace(/ /g,'') entfernt alle Leerzeichen. Ist die Länge dieses Strings nicht gleich der ursprünglichen Länge, dann war logischerweise mindestens ein Leerzeichen drin. g steht dabei für global (also alle entfernen). Könnte man auch weglassen, da ja bereits ein Leerzeichen ausreicht, um Deinen Kunden zu ärgern...

Gruß - Pit

Edit - hier das JS mit Kommentaren:
PHP:
function checkPfad(pfad){//das Argument Pfad enthält den Inhalt des file inputs
pfad=pfad.split('\\');//splittet pfad an den backslashes (ergibt ein array)
pfad=pfad[pfad.length-1];//setzt pfad gleich dem letzten array-Eintrag, also Dateiname
if(pfad.length!=pfad.replace(/ /g,'').length){//checkt Länge des Dateinamens gegen Länge des Namens ohne Leerzeichen
alert('Dateiname darf keine Leerzeichen enthalten!');//Wenn Ursprunglänge ungleich Länge ohne Leerzeichen => Alarm
return false;//hier nicht von Relevanz, da es nicht um Formular-submit geht
}
}
 
Zuletzt bearbeitet:
Excellent! Sofort verstanden :-D Danke dir vielmals, ist denk ich auch die effektivste Lösung!

Dankeschön!
 
Naja, effektiv ist das nicht, am effektivsten wäre es, wenn schon keine Leerzeichen erlaubt sind (warum eigentlich?) dies auf dem Server einfach zu ändern. Weil so wird es zumindest unerfahrene Nutzer ziemlich nerven, da diese dann erstmal die Datei umbennen müssen, was nicht jedermanns Sache ist.
 
@pit
replace ersertzt doch eigentlich nur das erste gefundene Zeichen oder? Wäre da nicht ein selbst geschriebenes replaceAll() geeigneter?
 
Moin!
Oklino schrieb:
@pit
replace ersertzt doch eigentlich nur das erste gefundene Zeichen oder? Wäre da nicht ein selbst geschriebenes replaceAll() geeigneter?
Auf den g-Schalter und was er macht hatte ich bereits hingewiesen:
pit-r schrieb:
pfad.replace(/ /g,'') entfernt alle Leerzeichen. Ist die Länge dieses Strings nicht gleich der ursprünglichen Länge, dann war logischerweise mindestens ein Leerzeichen drin. g steht dabei für global (also alle entfernen). Könnte man auch weglassen, da ja bereits ein Leerzeichen ausreicht, um Deinen Kunden zu ärgern...
Und wie das rote Sätzchen sagt, wäre es hier auch gar nicht nötig.

Ahoi - Pit
 
achso. ok :)
ich hab mir leider hier im Institut das lesen von Kommentaren abgewöhnt, weil mein Vorgänger das hier überhaupt nicht drauf hatte *rotwerd*
 
Zurück
Oben