Avatar billede jammerlab Nybegynder
05. marts 2008 - 23:47 Der er 18 kommentarer og
1 løsning

Hvilke tegn er ulovlige i et mappe navn?

Hvad kan jeg bruge til at tjekke en string? (navn på en mappe) inden jeg bruger mkdir...

Jeg har kigget rundt omkring og jeg syntes ikke at kunne finde det jeg har brug for :|
Avatar billede jee Nybegynder
06. marts 2008 - 08:34 #1
Et filnavn kan ikke indeholde følgende tegn:
\ / : * ? " < > |


Er vist nok den besked man plejer at modtage når man renamer folders

Noget i den stil, kan ikke lige huske dem alle
Avatar billede jee Nybegynder
06. marts 2008 - 08:35 #2
Gennemlæste lige dit spørgsmål igen og ser ud til jeg var lidt for hurtigt :(

Æv
Avatar billede jammerlab Nybegynder
06. marts 2008 - 13:23 #3
Ja har bare lige brug for at vide hvordan jeg kan kontrollere det :P
Avatar billede majbom Novice
06. marts 2008 - 15:44 #4
hvis du bare skal tjekke om strengen indeholder bestemt tegn, kan du bruge ereg: http://dk.php.net/manual/da/function.ereg.php
Avatar billede jammerlab Nybegynder
06. marts 2008 - 16:06 #5
Jeg har prøvet også med eregi men jeg kan ikke forstå dem... kan ikke finde ud af at få tegnene kontrolleret... prøvede med [!"#¤%&/()=}^] osv men det kunne den slet ikke finde ud af :)
Avatar billede nielle Nybegynder
06. marts 2008 - 17:54 #6
Det kan på *ingen* måde betale sig at skrive kode baseret på ereg_xxxx() funktionerne - de forsvinder snart helt ud af PHP og så holder dit script jo op med at virke ...

Desuden har der længe været et ganske udemærket alternativ, som både kan *mere* og er *hurtigere*: preg_xxxx() funktionerne. Så brug dog dem i stedet.


Løsningen på dit problem kunne se nogenlunde sådan her ud:

$pattern = "[\\/:*?\"<>|]";
$phpPattern = "#$pattern#";
if ($preg_match($phpPattern, $dinStreng)) {
    echo "Desværre indeholder navnet et eller flere ulovlige tegn";
} else {
    echo "OK";
}


For en grundlæggende gennemgang af regulære udtryk, vil jeg anbefale at I starter her:

http://www.eksperten.dk/artikler/1156

(... og eventuelt fortæstter med de 3 andre artikler jeg har skrevet om emnet her på Eksperten).
Avatar billede majbom Novice
06. marts 2008 - 18:31 #7
-> nielle - go' idé
Avatar billede jammerlab Nybegynder
06. marts 2008 - 18:45 #8
Hmm... for denne fejl

Fatal error: Function name must be a string in C:\wamp\www\imgsys\admin_up.php on line 49

der er chr i min string...
Avatar billede jammerlab Nybegynder
06. marts 2008 - 18:47 #9
Ah der var et $ foran din preh_match...

men jeg kan ikke forstå hvordan jeg kan tilføje chr til den kontrol :(

$pattern = "[\\/:*?\"<!#¤%&`';:>|]";
Avatar billede majbom Novice
06. marts 2008 - 19:20 #10
tænker du på f.eks. ÆØÅ?

det er jo bare at sætte dem ind i linjen:

$pattern = "[\\/:*?\"<!#¤%&`';:>|æøå]";
Avatar billede jammerlab Nybegynder
06. marts 2008 - 19:24 #11
nej... altså .. med det pattern; $pattern = "[\\/:*?\"<!#¤%&`';:>|]";

der fucker den helt op... den kan ikke finde ud af det..
Avatar billede jammerlab Nybegynder
06. marts 2008 - 19:25 #12
Warning: preg_match() [function.preg-match]: Unknown modifier '§ in
Avatar billede nielle Nybegynder
06. marts 2008 - 19:27 #13
Hvad mener du med "chr"?

Og var det ikke kun ulovlige tegn du ville undgår? Nu tilføjer du så mange flere tegn til den liste, uden at de faktisk er ulovlige.
Avatar billede nielle Nybegynder
06. marts 2008 - 19:29 #14
Hvi # tegnet også slak være ulovligt (selv om det ikke er det) så kan du ikke bruge #-tegn i hver ende af:

$phpPattern = "#$pattern#";

i hvert fald skal det så escapes som \#
Avatar billede jammerlab Nybegynder
06. marts 2008 - 19:30 #15
chr/tegn... men jow det var nu kun de ulovlige *tænker* det var vidst også forkert af mig de må selvf. gerne indeholde de tegn... men til en anden gang hvordan tilføjer jeg disse tegn?? Kan jo tilsyndeladende ikke bare taste dem ind..
Avatar billede nielle Nybegynder
06. marts 2008 - 19:34 #16
Du får fejlen fordi at du indstastede et #-tegn. Det var den eneste grund.

Dette gav anledning fordi at #-tegnet allerede har et andet formål i koden, nemlig at fungere som start og slut i:

$phpPattern = "#$pattern#";

Det ekstra #-tegn fik den derfor til at tro at mønsteret sluttede før at det gjorde.

Løsningen er at escale det som \#:

$pattern = "[\\/:*?\"<!\#¤%&`';:>|]";
$phpPattern = "#$pattern#";
Avatar billede nielle Nybegynder
06. marts 2008 - 19:35 #17
I øvrigt lader det til at det var en nemmere opgave at lave et tjek som definere hvad der er lovlige tegn i stedet for at fokusere på hvad der er ulovligt. :^)
Avatar billede jammerlab Nybegynder
07. marts 2008 - 08:03 #18
Hehe :) tak for hjælpen... smider du ikke et svar Nielle?
Avatar billede nielle Nybegynder
07. marts 2008 - 15:32 #19
Svar :^)
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