webForumDet fria alternativet

regexp för att byta ut värde i en querystring

ASP

6 svar · 269 visningar · startad av Obbelix

Medlem sedan okt. 2002257 inlägg
Frågan#1

Hej.

Undrar om man kan göra en funktion som byter ut ett värde i en querystring.
Säg att man har en sökväg som denna:
"sida.asp?id1=12&id2=21&id3=22"

och sen i sidan vill man ha kvar alla querys fast bara ändra värdet på en typ:
"sida.asp?id1=12&id2=21&id3=44"

Så då tänkte jag att man istället för att behöva på varje länk skriva

sida.asp?id1=<%=request.querystring("id1")%>&id2=<%=request.querystring("id1")%>&id3=44

så skulle det räcka med

sida.asp?<%=request.querystring%>

men då ha en funktion som kan byta ut lite typ

sida.asp?<%=funktionen(request.querystring,"id3","44")%>

och resultatet blir

sida.asp?id1=12&id2=21&id3=44

Det går väl inte med en enkel replace eftersom om man har en wuery som heter ID och en annan ID2 och vill ändra ID så kommer ju även ID2 ändras osv..

Kanske finns nåt smartare sätt än det jag tänkt mig?
Skulle man kanske även kunna utveckla den lite så att man kan ändra flera värden i en å samma? kanske

sida.asp?<%=funktionen("id1=12","id2=21")%>

och att då funktionen alltid utgår ifrån request.querystring och sen på nåt magiskt sätt byter ut och returnerar rätt query.

Nån som fattar vad jag menar och vill ha ut av det hela?

Medlem sedan sep. 20026 425 inlägg
#2

Min fråga blir då: varför vill du ändra värdet på en querystring? Vad vill du egentligen åstadkomma?

Medlem sedan okt. 2002257 inlägg
#3

Ja men säg att du har en gästbok eller liknande med paging.
Men för att gästboken ska vara rätt å så (även saker runt den) så behövs de andra queryna. Och om jag bara vill byta ut "page=" skulle det underlätta med en sån funktion.

Är du med? :)

Medlem sedan juni 2004533 inlägg
#4

Du kan använda regular expression för att ersätta värdet.

Du kan bygga ihop mönstret så här: "(^&" & strKey & "=)[^&](&|$)" och sedan ersätta med "$1" & Server.URLEncode(strValue) & "$2".

Du behöver inte göra en funktion som ersätter flera värden på en gång, du kan anropa funktionen flera gånger:

sida.asp?<%=funktionen(funktionen(Request.Querystring,"id1","12"),"id2","21")%>

Här har du en artikel om ersättning med hjälp av RegExp:
http://guffa.com.loopiadns.com/Programming_article.asp?id=3

Medlem sedan okt. 2002257 inlägg
#5

Har först nu hunnit kika på detta och gjort följande funktion:

function fixquery(sStr,sKey,sValue)

 Set objRegExp = New regexp 
 objRegExp.Global = true 
 objRegExp.IgnoreCase = true 
 objRegExp.Pattern = "(^&" & sKey & "=)[^&](&|$)"
 fixquery = objRegExp.Replace(sStr, "$1" & sValue )

end function

Men den vill inte funka nåt vidare, eller rättare sagt , inte alls.

Om jag anropar den såhär:

sidan.asp?<%=fixquery(request.querystring, "page", "12")%>

så returnerar den querystringen som den ser ut från början.

Har testat "alla" kombinationer med $1/$2 osv men den byter inte ut nåt. Och då jag inte har nån större koll på regexp så vet jag inte vad som är fel.

Medlem sedan juni 2004533 inlägg
#6

Använd de thär mönstret: "(^|\?|&)(" & strKey & "=)[^&]*(&|$)" och ersätt med "$1$2" & Server.URLEncode(strValue) & "$3".

Medlem sedan okt. 2002257 inlägg
#7

Tackar tackar!

Funkar perfekt :)

261 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)