Avatar billede Strawberry Seniormester
14. april 2026 - 10:11 Der er 8 kommentarer

Validering af filnavn i formular

Jeg har en side med en formular, som opretter en fil. Jeg har forsøgt at lave JavaScript validering af filnavnet. Hvordan får jeg lavet denne validering fuldstændig?

Jeg har prøvet at se på noget regexp, men jeg forstår det ikke helt og har ikke kunne få det til at virke.

<script>
function validateForm() {
var x=document.forms["form"]["filename"].value;
if (x == '') {
  alert("Du skal udfylde filnavn...");
  return false;
}
if (x.indexOf(".")==0 || x.indexOf(" ")==0 || x.indexOf("/")>=0 || x.indexOf("\\")>=0 || x.indexOf(":")>=0) {
  alert('Du har brugt ugyldige tegn i filnavnet...\n\nTilladte tegn er: A-Å 0-9 . _ - ( )\n\nFilnavnet må ikke starte med tegnet . (punktum eller mullemrum)');
  return false;
  }
}
</script>
Avatar billede erikjacobsen Ekspert
15. april 2026 - 10:31 #1
Du skriver ikke hvad der går galt. Jeg lægger et eksempel på noget der ser ud til at virke. Men du skal huske at du også SKAL kontrollere igen på serveren - enhver kan gå udenom din javascript-validering.

test1.php:

<?php
  print_r($_POST);
?>

<script>
function validateForm() {
var x=document.forms["form"]["filename"].value;
if (x == '') {
  alert("Du skal udfylde filnavn...");
  return false;
}
if (x.indexOf(".")==0 || x.indexOf(" ")==0 || x.indexOf("/")>=0 || x.indexOf("\\")>=0 || x.indexOf(":")>=0) {
  alert('Du har brugt ugyldige tegn i filnavnet...\n\nTilladte tegn er: A-Å 0-9 . _ - ( )\n\nFilnavnet må ikke starte med tegnet . (punktum eller mullemrum)');
  return false;
  }
return true;
}
</script>

<form name="form" method="POST" action="test1.php" onsubmit="return validateForm()">
  <input type="text" name="filename">
  <input type="submit">
</form>
Avatar billede Strawberry Seniormester
15. april 2026 - 11:25 #2
Tak for dit svar. Ja du har ret det kode jeg har skrevet virker fint nok. Men jeg er bare i tvivl om hvor mange tegn jeg skal tillade.

Det ser ud til at give problemer hvis man bruger tegnet " i filnavnet. Det kan godt bruges på Linux servere, men hvis man bruger tegnet " så kan filerne ikke hentes ned på Windows styresystemer. Så det skal jeg lige have tilføjet. Jeg er også i tvilvl om jeg f.eks. skal tillade tegnene ' @ ¤ + % ~

Siden bruges kun internt, så der er ingen risiko for, at der er nogen der går udenom javascript-validering. Der tilføjes .txt til alle filer så man kan ikke gemme filen som f.eks. .php
Avatar billede erikjacobsen Ekspert
15. april 2026 - 14:13 #3
Ok, på den måde "ikke virke". Du skal ikke lave en negativ-liste, men en positiv-liste. Tillad f.eks. kun a-z, 0-9 og måske underscore og bindestreg, og hvis man kan udelukke æøå er alting lidt nemmere.

Det er for bøvlet at udelukke hvilke tegn, der kan være ulovlige. Det er f.eks. skørt at der operativsystemer, der ikke tillader ? i et filnavn.

Men du skal tjekke efter på serversiden. Den nærmeste "fjende" er en medarbejder, og selv om det ikke sker, så har "interne systemer" en tendens til at blive offentlige med tiden. Og så er der håndværket: gør det orn'li fra starten... :)

Så har du brug for et eksempel med f.eks. regulære udtryk? Sig hvad dine regler skal være.
Avatar billede Strawberry Seniormester
16. april 2026 - 11:38 #4
Ja så er det bare, hvordan gør jeg det?
Avatar billede erikjacobsen Ekspert
16. april 2026 - 16:28 #5
Med a-zA-z0-9 og - og _:

<script>
function validateForm() {
var x=document.forms["form"]["filename"].value;
x = x.trim();
if (x == '') {
  alert("Du skal udfylde filnavn...");
  return false;
}
if (!x.match(/^[a-zA-Z0-9_-]+$/)) {
  alert('Du har brugt ugyldige tegn i filnavnet...\n\nTilladte tegn er: A-Z 0-9 _ -')
  return false;
  }
return true;
}
</script>

<form name="form" method="POST" action="test2.php" onsubmit="return validateForm()">
  <input type="text" name="filename">
  <input type="submit">
</form>
Avatar billede Strawberry Seniormester
18. april 2026 - 22:15 #6
Jeg mener det skal være tilladt at skrive punktummer, dog må filnavnet ikke starte med punktum eller mellemrum og det må også gerne være tilladt at skrive parenteser.

Kan det gøres ved at ændre koden til følgende:

<script>
function validateForm() {
var x=document.forms["form"]["filename"].value;
x = x.trim();
if (x == '') {
  alert("Du skal udfylde filnavn...");
  return false;
}
if (!x.match(/^[a-zA-Z0-9()._-]+$/) || x.indexOf(".")==0 || x.indexOf(" ")==0) {
  alert('Du har brugt ugyldige tegn i filnavnet...\n\nTilladte tegn er: A-Z 0-9 ( ) . _ - ')
  return false;
  }
return true;
}
</script>

<form name="form" method="POST" action="test2.php" onsubmit="return validateForm()">
  <input type="text" name="filename">
  <input type="submit">
</form>


Eller er der en mere korrekt måde at lave koden på?
Avatar billede erikjacobsen Ekspert
20. april 2026 - 10:56 #7
Hvis du synes det virker, så er det fint nok. Generelt ville jeg prøve at smide alle checks ind i det regulære udtryk, men man behøvs ikke.

Men pas hvad du mener er et "rigtigt" filnavn. Det du har virker nok, så vidt jeg lige kan se. Men der er faktisk steder hvor et filnavn ikke må slutte med et punktum. Det er jo træls. Og sikkert andre ting. Derfor foreslår jeg regler der li'som altid gælder.

Det skal dog også overvejes om det er sundt at lade brugere vælge filnavne - det er en potentiel sikkerhedsbrist. Jeg ville hellere putte deres beskrivelse/navn i en database, finde på et simpelt navn til selve filen, og bruge et script til at oversætte mellem de to.
Avatar billede Strawberry Seniormester
20. april 2026 - 11:14 #8
Jeg er glad for du mener min JavaScript kode kan bruges.

Jeg kan ikke se problemer med sikkerheden og at formularen opretter filer, så længe der kun kan opretes .txt filer og der kun kan læses .txt filer. Jeg kan bare se mange fordele ved at notaterne bliver gemt som filer i stedet for i en database. Blandt andet at det er nemmere at tage backup.
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