Avatar billede left Nybegynder
25. juli 2003 - 19:21 Der er 4 kommentarer og
1 løsning

RegExp på streng

Jeg skal have valideret en streng, som indeholder et ønsket brugernavn. Der er dog nogle meget præcise krav til hvilke tegn brugernavnet må indeholder.

Må indeholde...
- store og små bogstaver fra a til å.
- tal fra 0 til 9 (alle tal).
- punktum, men maks. ét
- mellemrum, men ikke 2 eller flere mellemrum efter hinanden.

Da jeg bruger trim() behøver den ikke undersøge for mellemrum som start og slut på brugernavn.

Sandhedsudtrykket skal anvendes i nedenstående funktion, hvor ??? skal erstattes af er RegExp-udtryk. Funktionen returnerer False eller True afhængig af om strengen/brugernavnet opfylder alle krav.

Function valUsername(ByVal sInput)
Dim oRegexp, sPattern, fIgnoreCase
fIgnoreCase = False
sPattern = "???"
Set oRegExp = New RegExp
oRegExp.Pattern = sPattern
oRegExp.IgnoreCase = fIgnoreCase
valUsername = oRegExp.Test(Trim(sInput))
Set oRegExp = Nothing
End Function
Avatar billede eagleeye Praktikant
25. juli 2003 - 21:15 #1
Jeg ved ikke om du kan få bygget det hele i samme pattern men ellers kan du jo lave functionen sådan her så den tjekker på mellemrum og punktum for sig og så tjekker om regular expression om det er gyldige karakter der indgår:


<%
Function valUsername(ByVal sInput)
    strOk = true
    str = Trim(sInput)

'Tjek for mere end et punktum:
    arr=split(str,".")
    if ubound(arr) > 1 then strOk = false
    set arr = Nothing

'Tejk på om der er to mellemrum efter hinadnen 
    if inStr(1,str,"  ") > 0 then strOk = false

'Tjek for om stregen indeholder a-å 0-9 mellemrum eller punktum   
    Dim ianRegEx
    Set ianRegEx = New RegExp
    ianRegEx.Pattern = "^[a-z0-9æøå\x20\.]+$"
    ianRegEx.Global = True
    ianRegEx.IgnoreCase = true
    if ianRegEx.Test(str) = false then strOk = false
    set ianRegEx = nothing
       
    valUsername = strOK
End Function




var = "brugn.adf avn"
if valUsername(var) then
  'Ok brugernavn
  Response.Write "Ok"
else
  'ikke ok
  Response.Write "Ikke ok"
end if
%>
Avatar billede left Nybegynder
25. juli 2003 - 23:07 #2
Hvad betyder x20 ?

Har du mulighed for at få '-'og '_' med i kravet, hvor det heller ikke må forekomme flere gange efter hinanden, men gerne forskellige steder?

Så kan jeg godt godtage din løsning :-)
Avatar billede eagleeye Praktikant
25. juli 2003 - 23:17 #3
\xN hvor N her er 32, er en hexidecimal ascii karakter man kan angive og 32 er hex værdien for et mellemrum.

Jeg kom lige til at tænke på man kan jo lave et patterne som tjekker om der er dobbelt --, __ eller mellemrum i set det for det med inStr:

Så funktionen bliver:

Function valUsername(ByVal sInput)
    strOk = true
    str = Trim(sInput)

'Tjek for mere end et punktum:
    arr=split(str,".")
    if ubound(arr) > 1 then strOk = false
    set arr = Nothing

'Tjek for om stregen indeholder a-å 0-9 mellemrum eller punktum   
    Dim ianRegEx
    Set ianRegEx = New RegExp
    ianRegEx.Pattern = "^[a-z0-9æøå\x20\._-]+$"
    ianRegEx.Global = True
    ianRegEx.IgnoreCase = true
    if ianRegEx.Test(str) = false then strOk = false

'Tjek om der er dobbelt __, mellemrum, eller --
    ianRegEx.Pattern = "(__|\x20\x20|--)"
    if ianRegEx.Test(str) = true then strOk = false
    set ianRegEx = nothing
       
    valUsername = strOK
End Function
Avatar billede eagleeye Praktikant
25. juli 2003 - 23:18 #4
hov 32 i føste linje i sidste kommentar skulle være 20.
Avatar billede left Nybegynder
27. juli 2003 - 19:31 #5
Tak for svaret :-)

Kan du i øvrigt anbefale nogle links, hvor jeg kan læse mere om emnet?
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