Kom ihåg mig?
Home Menu

Menu


Fel med Regular Expression

Ämnesverktyg Visningsalternativ
Oläst 2004-10-13, 21:31 #1
rille77s avatar
rille77 rille77 är inte uppkopplad
Medlem
 
Reg.datum: Dec 2003
Inlägg: 213
rille77 rille77 är inte uppkopplad
Medlem
rille77s avatar
 
Reg.datum: Dec 2003
Inlägg: 213
Nån som kan se vad som är galet den här ASP koden.

Funktionen

Kod:
Function IsAZ09(strCheck)
  With New RegExp
   .IgnoreCase = True
   .Pattern = "^[a-z][0-9][A-Z]$"
   IsAZ09 = .Test(strCheck)
  End With
End Function
Anropet

Kod:
IF NOT IsAZ09(strUser) THEN 
 userFel = "2"
 bolFel = True
END IF
Tilldelningen av strUser

Kod:
strUser = Replace(Trim(Request.Form("user")), "'", "''")
Tacksam för hjälp då jag har kört fast helt.
rille77 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-10-13, 22:00 #2
Mikael Simonsson Mikael Simonsson är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2004
Inlägg: 34
Mikael Simonsson Mikael Simonsson är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2004
Inlägg: 34
Citat:
Kod:
.Pattern = "^[a-z][0-9][A-Z]$"
Jag skulle gissa på att det är här felet ligger, tyvärr har jag inte möjlighet att testa koden. Som det är skrivet nu måste användarnamnet bestå av 3 tecken, där första måste vara en liten bokstav, andra en siffra osv.

Prova att ändra till:

Kod:
.Pattern = "^[a-z0-9]+$"
Du behöver inte ha med A-Z när du använder:

Kod:
.IgnoreCase = True
Mikael Simonsson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-10-13, 22:06 #3
Mikael Simonsson Mikael Simonsson är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2004
Inlägg: 34
Mikael Simonsson Mikael Simonsson är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2004
Inlägg: 34
Citat:
Kod:
strUser = Replace(Trim(Request.Form("user")), "'", "''")
Kan tillägga att Replace funktionen här är helt onödig då du inte tillåter ' i IsAZ09() och för att undvika fel bör du testa mot SQL-injection när du bygger din SQL-fråga, helst inte tidigare.
Mikael Simonsson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-10-13, 23:19 #4
rille77s avatar
rille77 rille77 är inte uppkopplad
Medlem
 
Reg.datum: Dec 2003
Inlägg: 213
rille77 rille77 är inte uppkopplad
Medlem
rille77s avatar
 
Reg.datum: Dec 2003
Inlägg: 213
Citat:
QUOTE
CODE
strUser = Replace(Trim(Request.Form("user")), "'", "''")



Kan tillägga att Replace funktionen här är helt onödig då du inte tillåter ' i IsAZ09() och för att undvika fel bör du testa mot SQL-injection när du bygger din SQL-fråga, helst inte tidigare.
Stort tack för hjälpen Mikael, är inte så hemma på RegExp än.
Fråga bara, varför bär man inte testa för SQL injections före SQL frågan???
rille77 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-10-16, 13:20 #5
Mikael Simonsson Mikael Simonsson är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2004
Inlägg: 34
Mikael Simonsson Mikael Simonsson är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2004
Inlägg: 34
Citat:
Originally posted by rille77@Oct 13 2004, 23:19
Fråga bara, varför bär man inte testa för SQL injections före SQL frågan???
(Ursäkta mitt lite sena svar.)

Jo, för att kunna hantera alla variabler under samma förutsättningar. Säg att du vill skriva ut det felaktiga användarnamnet eller fylla i ett formulär åt användaren, så att användaren kan rätta till sitt fel utan att behöva skriva om allt. Då måste du komma ihåg om du har bytt ut alla ' mot '' för att sen göra det motsatta när du ska skriva ut variablen.

Så en bra regel är att hantera alla variabler som "fientliga", oavsett om du hämtar data från en databas, cookies, Request objektet osv. När du bygger en SQL-fråga testar du mot SQL-injection och när du skriver ut en variabel använder du Server.HTMLEncode().

Exempel:
Kod:
strUser = Trim(Request.Form("user"))
intUserId = Request.Form("userid")

' Bygga en SQL-fråga (sträng)
strSql = "SELECT * FROM users WHERE username = '" & Replace(strUser, "'", "''") & "'"

' Bygga en SQL-fråga (tal)
strSql = "SELECT * FROM users WHERE userid = " & Int(intUserId)

' Skriva ut en variabel
Response.Write(Server.HTMLEncode(strUser))
Response.Write(Server.HTMLEncode(intUserId))
Mikael Simonsson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-10-16, 14:50 #6
digiArt digiArt är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jan 2004
Inlägg: 1 429
digiArt digiArt är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jan 2004
Inlägg: 1 429
Din regexpsträng borde också kunna skrivas som
Kod:
^\w$
digiArt är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-10-16, 15:04 #7
Mikael Simonsson Mikael Simonsson är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2004
Inlägg: 34
Mikael Simonsson Mikael Simonsson är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2004
Inlägg: 34
Citat:
Originally posted by digiArt@Oct 16 2004, 14:50
Din regexpsträng borde också kunna skrivas som
Kod:
^\w$
Din kod fungerar bara med ett tecken och enligt dokumentationen är \w med underscore:
Citat:
\w - Matches any word character including underscore. Equivalent to "[A-Za-z0-9_]".
Sen är nog "^[a-z0-9]+$" lättare att förstå om man inte jobbar med Reg.Exp ofta.
Mikael Simonsson är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 13:33.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017