Avatar billede goose Nybegynder
22. september 2003 - 14:12 Der er 18 kommentarer og
2 løsninger

Validering af filnavn

Jeg vil gerne validerer, at et filnavn kun indeholder følgende karakterer når jeg vælger at uploade en fil:
abcdefghijklmnopqrstuvwxyz1234567890

typisk vil en sti jo se sådan her ud:
J:\billeder usorteret\Biler\1932 Ford.jpg

- og den skal så kun validerer det der står mellem det sidste . og den sidste \

Jeg bruger pt. følgende til at validerer om filtypen er den rigtige:

<script type="text/javascript">
// formular tjek start
function tjek_fil(){
var tjek = document.fil;

if (fil.foto.value == ""){
    alert("Du skal vælge en fil");
    fil.foto.focus();
    return (false);
}
// checker filtype
    if (fil.foto.value.length>0){
            FileType = fil.foto.value.substring(fil.foto.value.length-4)
            FileType = FileType.toLowerCase()
            if (FileType!=".jpg" && FileType!=".gif"){
                alert("Der kan kun bruges filer af typen .jpg og .gif !");
                fil.foto.focus();
                return (false);
            }


}
// slut for filcheck
return (true);
}
</script>

/goose
Avatar billede nmh Nybegynder
22. september 2003 - 14:16 #1
Noget i denne stil må kunne bruges:
tegn="abcdefghijklmnopqrstuvwxyz1234567890"
filnavn="abcdefg"
for i=1 to len(filnavn)
  if instr(tegn,mid(filnavn,i,1)=0 then
    'fejl skal håndteres
    exit for
  end if
next
Avatar billede nmh Nybegynder
22. september 2003 - 14:18 #2
ups: jeg har gjort det igen. Jeg så ikke det skulle være i JavaScript.
Mit forslag er i VBscript.
Avatar billede lklingenberg Nybegynder
22. september 2003 - 14:20 #3
eller noget regular expressions

function ValidNumber(item) {
regex = /^\a+$/;
return (item.match(regex));
}
Avatar billede mm12010 Nybegynder
22. september 2003 - 14:21 #4
picture = String(fil.foto.value);
    pic = picture.substr(0,picture.lastIndexOf("."))
    pic = pic.replace(/\346/gi, "ae");
    pic = pic.replace(/\370/gi, "oe");
    pic = pic.replace(/\345/gi, "aa");
    pic = pic.replace(/[^a-zA-Z0-9]+/gi, "");
Avatar billede goose Nybegynder
22. september 2003 - 14:24 #5
- for 200 point vil jeg gerne have en færdig validering der passer ind i den jeg bruger i forvejen.

/Goose
Avatar billede roenving Novice
22. september 2003 - 14:25 #6
lklingenbergs idé er klart den bedste, men jeg kender ikke den der \a, men ville bruge \w som betyder tal, bogstaver (a-z) og _, som vel også er det som må være lovligt, så:

function validFilename(txt){
regExp = /^\w+$/i;
return txt.match(regExp);
}
Avatar billede lklingenberg Nybegynder
22. september 2003 - 14:30 #7
ups - det var en 'typo' med det \a. roenving, du kan sikkert give ham en færdig valideringspakke som inkluderer regex-funktionen.
Avatar billede roenving Novice
22. september 2003 - 14:31 #8
<script type="text/javascript">
// formular tjek start
function tjek_fil(){
var tjek = document.fil;

if (fil.foto.value == ""){
    alert("Du skal vælge en fil");
    fil.foto.focus();
    return (false);
}
// checker filtype
    if (fil.foto.value.length>0){
            FileType = fil.foto.value.substring(fil.foto.value.length-4)
            FileType = FileType.toLowerCase()
            file = fil.foto.value.substring(fil.foto.value.lastIndexOf("\"),fil.foto.value.lastIndexOf("."))
            if (FileType!=".jpg" && FileType!=".gif" || !validFileName(file)){
                alert("Fejl i filnavn.\nKun tal og/eller bogstaver i filnavn, eller typefejl.\nDer kan kun bruges filer af typen .jpg og .gif !");
                fil.foto.focus();
                return (false);
            }


}
// slut for filcheck
return (true);
}
function validFilename(txt){
regExp = /^\w+$/i;
return txt.match(regExp);
}
</script>
Avatar billede mm12010 Nybegynder
22. september 2003 - 14:34 #9
<script type="text/javascript">
function tjek_fil(){
    if(fil.foto.value == ""){
        alert("Du skal vælge en fil");
        fil.foto.focus();
        return (false);
        }
    if(fil.foto.value.length>0){
        FileType = fil.foto.value.substring(fil.foto.value.length-4)
        FileType = FileType.toLowerCase()
        if(FileType!=".jpg" && FileType!=".gif"){
            alert("Der kan kun bruges filer af typen .jpg og .gif !");
            fil.foto.focus();
            return (false);
            }
        pic = String(fil.foto.value);
        pic = pic.substr(0,pic.lastIndexOf("."))
        if(pic.match(/[^a-zA-Z0-9]+/gi)){
            alert("må kun indeholde a-z og 0-9")
            return (false);
            }
        }
    // slut for filcheck
    return (true);
    }
</script>
Avatar billede roenving Novice
22. september 2003 - 14:36 #10
Ups, denne linje skal lige have en +1 med:

            file = fil.foto.value.substring(fil.foto.value.lastIndexOf("\")+1,fil.foto.value.lastIndexOf("."))
Avatar billede mm12010 Nybegynder
22. september 2003 - 14:49 #11
og her en rettelse til min :o)

denne linie:
  pic = pic.substr(0,pic.lastIndexOf("."))
skal selvfølgelig være:
  pic = pic.substring(pic.lastIndexOf("\134")+1,pic.lastIndexOf("."))
Avatar billede goose Nybegynder
22. september 2003 - 14:54 #12
mm12010 >> jeg har nu prøvet dit script, det submitter uanset hvad, også selvom der slet ikke er valgt en fil.

roenving >> jeg er ikke helt sikker på jeg forstår det med regExp og jeg kan heller ikke rigtigt få dit script til at virke, jeg vil gerne have at den laver en alert hvis der er ulovlige karakterer i navnet.

/Goose
Avatar billede roenving Novice
22. september 2003 - 15:03 #13
Der var en fejl mht. \ -- den kører helt på min egen nu !-)

<script type="text/javascript">
// formular tjek start
function tjek_fil(){
var tjek = document.fil;

if (fil.foto.value == ""){
    alert("Du skal vælge en fil");
    fil.foto.focus();
    return (false);
}
// checker filtype
    if (fil.foto.value.length>0){
            FileType = fil.foto.value.substring(fil.foto.value.length-4)
            FileType = FileType.toLowerCase()
            file = fil.foto.value.substring(fil.foto.value.lastIndexOf("\\")+1,fil.foto.value.lastIndexOf("."))
            if (FileType!=".jpg" && FileType!=".gif" || !validFilename(file)){
                alert("Fejl i filnavn.\nKun tal og/eller bogstaver i filnavn, eller typefejl.\nDer kan kun bruges filer af typen .jpg og .gif !");
                fil.foto.focus();
                return (false);
            }


}
// slut for filcheck
return (true);
}
function validFilename(txt){
regExp = /^\w+$/i;
return txt.match(regExp);
}
</script>
Avatar billede mm12010 Nybegynder
22. september 2003 - 15:04 #14
<html>
<head>
<title>404206</title>
<script type="text/javascript">
function tjek_fil(){
    if(fil.foto.value == ""){
        alert("Du skal vælge en fil");
        fil.foto.focus();
        return (false);
        }
    if(fil.foto.value.length>0){
        FileType = fil.foto.value.substring(fil.foto.value.length-4)
        FileType = FileType.toLowerCase()
        if(FileType!=".jpg" && FileType!=".gif"){
            alert("Der kan kun bruges filer af typen .jpg og .gif !");
            fil.foto.focus();
            return (false);
            }
        pic = String(fil.foto.value);
        pic = pic.substring(pic.lastIndexOf("\134")+1,pic.lastIndexOf("."))
        if(pic.match(/[^a-zA-Z0-9]+/gi)){
            alert("må kun indeholde a-z og 0-9");
            return (false);
            }
        }
    // slut for filcheck
    return (true);
    }
</script>
</head>
<body>
<form action="?submit=true" method="post" enctype="multipart/form-data" name="fil" onSubmit="return tjek_fil();">
  <input type="file" name="foto">
  <br>
  <input type="submit" name="Submit" value="Submit">
</form>
</body>
</html>
Avatar billede goose Nybegynder
22. september 2003 - 15:18 #15
Tak for det, så virker det, smider du også lige et svar roenving så deler du med mm12010 ?

/Goose
Avatar billede roenving Novice
22. september 2003 - 15:26 #16
Velbekomme '-)
Avatar billede roenving Novice
22. september 2003 - 15:34 #17
-- og tak for points ;~}
Avatar billede goose Nybegynder
22. september 2003 - 17:08 #18
- lige et tillægsspørgsmål hvis i lytter med endnu, jeg bruger nu koden fra mm12010 men hvad nu hvis jeg vil tillade brugen af underscore og minus udover bogstaver og tal?

/Goose
Avatar billede roenving Novice
22. september 2003 - 17:13 #19
if(pic.match(/[^\w-]+/gi)){
Avatar billede goose Nybegynder
22. september 2003 - 17:33 #20
Takker :o)

/Goose
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester