Avatar billede krogstrup Nybegynder
24. juli 2005 - 12:24 Der er 9 kommentarer og
1 løsning

Bruge regular expression til at fjerne tegn i variabels indhold

Når der uploades filer til min server ønsker jeg ikke at filerne kan indeholde "ikke-hensigtsmæssige" tegn. F.eks.:
mine børn.jpg
svend's kattepoter & slikpose.jpg
ándre.jpg

osv. osv.

Følgende tegn skal være de eneste tilladte i filnavnet:
a-z
0-9
- (bindestreg)
_ (understreg)

Hvordan bruger jeg regular expression (eller måske anden metode, hvis der findes et smartere approach) til at "rense" filnavnet for ikke tilladte tegn ?
Avatar billede bjorn_jeppesen Nybegynder
24. juli 2005 - 13:21 #1
Du kunne lave en function a la:
Select case "din streng"
case "&"
  replace("din streng","&"," ")
case "á"
  replace("din streng","á","a")
end select

:-) Bjørn
Avatar billede busschou Praktikant
24. juli 2005 - 13:25 #2
i regulært udtryk så
--
<%
Function RegReplace(str)
  Dim regEx
  Set regEx = New RegExp
  regEx.Pattern = "[^a-zA-Z0-9\_\-\.]"
  While regEx.Test(str)
    str = regEx.Replace(str, "")
  Wend
  RegReplace = str
End Function

fil = "møg og åge$ .jpg"

response.write RegReplace(fil)
%>
Avatar billede busschou Praktikant
24. juli 2005 - 13:35 #3
der tog jeg så punktummet med, det giver problemer med et filnavn som "hej.med.dig.jpg"
Du kunne fjerne punktummet fra funktionen og så blot kalde den med selve navnet
Avatar billede busschou Praktikant
24. juli 2005 - 13:43 #4
jeg kan ikke lure de reg.exp, mangler lidt ekspertise der ;o),
Men ellers forsøg dig i reg.exp kategorien
Avatar billede krogstrup Nybegynder
24. juli 2005 - 14:02 #5
busschou >
Tak for dit svar. Du har ret i at funktionen kun bør acceptere eet punktum (og selvfølgelig det rigtige sted). Men jeg prøver mig frem med din funktion, som virker glimrende...

Takker :-)
Avatar billede ksoren Nybegynder
24. juli 2005 - 15:21 #6
Denne burde lade sidste punktum være i fred

Set re = New RegExp
re.Global = True
re.IgnoreCase = True

re.Pattern = "^.*\.(.*)$"
ext = re.Replace(filename, "$1")

re.Pattern = "[^a-z\d_-](?!" & ext & "$)"
filename = re.Replace(filename, "")
Avatar billede ksoren Nybegynder
24. juli 2005 - 15:23 #7
re.Global = True

så slipper man for at køre en while løkke :)
Avatar billede busschou Praktikant
24. juli 2005 - 15:24 #8
ksoren >> prøver jo at lære det reg.exp :o) ,, hvad gør udråbstegn godt for ?
Avatar billede krogstrup Nybegynder
24. juli 2005 - 15:35 #10
ksoren >
Tusind tak - det virker perfekt !


Smider lige eksempel med din kode indsat i funktion - så er det nemmere for andre at "grabbe"...

********************

<%
Function RegReplace(str)
    Set re = New RegExp
    re.Global = True
    re.IgnoreCase = True
   
    re.Pattern = "^.*\.(.*)$"
    ext = re.Replace(str, "$1")
   
    re.Pattern = "[^a-z\d_-](?!" & ext & "$)"
    RegReplace = re.Replace(str, "")
End Function

fil = "møg. og. åge$ .jpg"

response.write RegReplace(fil)
%>
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
Kurser inden for grundlæggende programmering

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