webForumDet fria alternativet

objRegExp

19 svar · 436 visningar · startad av Troll

TrollMedlem sedan dec. 2003229 inlägg
#1

Hejsan!

jag har sökt runt på forumet och hittat olika trådar som på olika sätt visar hur man kortar ner länkar som är för långa men jag förstår verkligen inte hur jag ska klämma in det i koden för att få det att fungera.

Jag antar att jag ska köra en If-sats och se om länken är X-antal tecken långt och om det är över angivet tal så ska den kortas ner men jag har problem med att klura ut hur jag bara ska kolla längden på länken och inte hela texten.

Så frågan är då hur jag med koden nedan ska kunna korta ner länkarna i texten till tex: "http://www.akjsfg...jhgs.com" som det är här på WF eller bara "http://www.askfhlkasjdhf..."

Ja ni fattar säkert. jag ber om ursäkt för att jag postar en tråd som säkerligen besvarats många gånger men jag förstår verkligen inte hur jag ska göra :/

<%
text = Server.HTMLEncode(RecSet("TEXTEN"))
text = Replace((text),vbCrLf,"<br>")
set objRegExp = new RegExp
objRegExp.Global = true
objRegExp.IgnoreCase = true
objRegExp.Pattern = "([url]http://[/url]|[url]https://[/url]|[url]ftp://[/url])([a-z/A-Z/0-9/./_/-/?/=/&]+)"
text = objRegExp.Replace(text, "<a href=""$1$2"" target=""_blank"">$2</a>")

Set RegExp = Nothing

Response.Write text
%>

Tack på förhand!

Jesper TMedlem sedan nov. 20017 144 inlägg
#2

http://www.webforum.nu/showthread.php?s=&threadid=104787&forumid=148

Det finns ett scriptarkiv på WF också. ;)

TrollMedlem sedan dec. 2003229 inlägg
#3

Jomen den har jag redan kikat på men där är det ju bara länkar innom <a >LÄNK</a> som blir till länkar.

Hur ska jag knåpa ihop det så att det räcker med att bara skriva http:// för att det ska bli en länk och forfarande kortas ner?

Men tack endå :)

@ndersMedlem sedan juni 200032 969 inlägg
#4

När du har kört din regexp ovan så har du ju länkar i din text? Vad händer om du kör den variabeln genom Erik Juhlins funktion?

TrollMedlem sedan dec. 2003229 inlägg
#5

Aaah, så dum jag är! :D
Nu gick det upp ett ljus för mig, ska testa lite mer, tack så mycket! :)

TrollMedlem sedan dec. 2003229 inlägg
#6

Ojdå, jag hade visst fel såg jag nu...

Körningsfel i Microsoft VBScript error '800a01c2'

Fel antal argument eller felaktig egenskapstilldelning.: 'ShortenLinkName'

/beta/lanktest/test.asp, line 79

<%
text = Server.HTMLEncode(RecSet("gbMed"))
text = Replace((text),vbCrLf,"<br>")
set objRegExp = new RegExp
objRegExp.Global = true
objRegExp.IgnoreCase = true
objRegExp.Pattern = "([url]http://[/url]|[url]https://[/url]|[url]ftp://[/url])([a-z/A-Z/0-9/./_/-/?/=/&]+)"
text = objRegExp.Replace(text, "<a href=""$1$2"" target=""_blank"">$2</a>")

Set RegExp = Nothing

Response.Write ShortenLinkName(text)
%>

Kod för att korta ner länkarna:

Function ShortenLinkName(sHTML, lFirstLength, lLastLength)
	Dim objRegExp
	Set objRegExp = New RegExp
	objRegExp.Global = True
	objRegExp.IgnoreCase = True
	
	objRegExp.Pattern = "(<a [^>]+> )([\s\S]{" & lFirstLength & "}?)([\s\S]+?)([\s\S]{" & lLastLength & "}?)(</a> )" '"(<a [^>]+> )([^</a>]{" & lFirstLength & "})([^</a>]+)([^</a>]{" & lLastLength & "})(</a> )"
	
	ShortenLinkName = objRegExp.Replace(sHTML, "$1$2...$4$5")
	Set objRegExp = Nothing
End Function
Jesper TMedlem sedan nov. 20017 144 inlägg
#7

lFirstLength, lLastLength

Antal tecken på försa respektive sista delen i länken.

Ex. Response.Write ShortenLinkName(text, 7,5)

@ndersMedlem sedan juni 200032 969 inlägg
#8

Du måste skicka med alla tre parametrarna till funktionen, i VBScript finns inte optionalparametrar i egendefinierade funktioner.

TrollMedlem sedan dec. 2003229 inlägg
#9

Aaah, ok. Tack så mycket!
Då jobbar vidare på det.
Ha det en bra dag och tack för all hjälp!

TrollMedlem sedan dec. 2003229 inlägg
#10

Nu blir jag knäpp.

Denna funktion ligger överst på sidan:

<%
Function ShortenLinkName(sHTML, lFirstLength, lLastLength)
	Dim objRegExp
	Set objRegExp = New RegExp
	objRegExp.Global = True
	objRegExp.IgnoreCase = True
	
	objRegExp.Pattern = "(<a [^>]+> )([\s\S]{" & lFirstLength & "}?)([\s\S]+?)([\s\S]{" & lLastLength & "}?)(</a> )" '"(<a [^>]+> )([^</a>]{" & lFirstLength & "})([^</a>]+)([^</a>]{" & lLastLength & "})(</a> )"
	
	ShortenLinkName = objRegExp.Replace(sHTML, "$1$2...$4$5")
	Set objRegExp = Nothing
End Function
%>

Det skumma med den är att en del blir bortplockad eftersom den finns en " ' " med i mitten av koden. Antar att det är där skon klämmer men hur ska jag åtgärda?

Denna kod ligger i mitten ungefär:

<%
text = Server.HTMLEncode(RecSet("gbMed"))
text = Replace((text),vbCrLf,"<br>")
set objRegExp = new RegExp
objRegExp.Global = true
objRegExp.IgnoreCase = true
objRegExp.Pattern = "([url]http://[/url]|[url]https://[/url]|[url]ftp://[/url])([a-z/A-Z/0-9/./_/-/?/=/&]+)"
text = objRegExp.Replace(text, "<a href=""$1$2"" target=""_blank"">$2</a>")
Set RegExp = Nothing

Response.Write ShortenLinkName(text, 7,5)
%>

Har placeringen av koden något med felet att göra?
jag får inget felmeddelande eller något utan det enda som händer är att inget händer. Inte allt för bra :/

Förstår inte vad det är som är fel och vad ska jag göra åt koden som blir bortplockad som kommentar?

CatZMedlem sedan jan. 20022 440 inlägg
#11
Response.Write ShortenLinkName(text)

Varför 7,5 ?

J.N.Medlem sedan apr. 20031 660 inlägg
#12

HEJ!

CatZ skrev:

Response.Write ShortenLinkName(text)

Varför 7,5 ?

Jesper T skrev:

lFirstLength, lLastLength

Antal tecken på försa respektive sista delen i länken.

Ex. Response.Write ShortenLinkName(text, 7,5)

Du kan alltså skriva vilken siffra du vill, men du måste skriva två, eftersom funktionen kräver det.

Det är alltid smart att göra en funktion/all kod så generell som är möjligt (och lämpligt) för att kunna använda den på andra ställen.

CatZMedlem sedan jan. 20022 440 inlägg
#13

Ja precis jag läste också hans inlägg, men jag menar du att de siffrorna inte har någon betydelse då? Kan det vara på grund av de siffrorna som funktionen "klipper" länken?

J.N.Medlem sedan apr. 20031 660 inlägg
#14

HEJ!

Jo, de gör all skillnad, utan dem fungerar det inte.

Grundtipset är att skriva exakt det antal argument som funktionen kräver, i detta fall tre.
Function ShortenLinkName(sHTML (#1), lFirstLength (#2), lLastLength (#3))

Vad är det som du inte får rätt på?

TrollMedlem sedan dec. 2003229 inlägg
#15

Det blir ingen skillnad på länkarna. Testa koden själva och se om ni får det att funka för det händer verkligen inget alls när jag kör min :(

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#16

På de ställena jag skrivit (<a...>) så har wF lagt in ett mellanslag mellan > och ).
Ta bort mellanslaget så ska det fungera bättre.

Varför där finns utkommenterad kod med vet jag inte... Måste missat. :)

TrollMedlem sedan dec. 2003229 inlägg
#17

Haha, att jag inte tänkte på det... Men tack så väldigt mycket för hjälpen!

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#18

Så, nu har jag redigerat lite i andra tråden också...

TrollMedlem sedan dec. 2003229 inlägg
#19

Nu funkar det fint efter att jag ändrade lite på mellanslagen. Men nu undrar jag ju av ren nyfikenhet hur jag ska bära mig åt för att bara korta ner länkar som är X-antal tecken långa.

Kom på att jag inte bara kan köra en If-sats på det hela eftersom länken ligger i mitten av massa text så det är ju inte så konstigt att alla länkar kapas även om det finns vissa som inte alls är långa.

Hmm, hur ska jag göra för att ändra sättet länkarna kortas ner på? om jag tex istället skulle köra en sånhär variant på länkarna: "http ://www.enväldigtlånglä..." ?

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#20

Du styr det med inparametrarna...

Response.Write ShortenLinkName(text, 26, 0)
132 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)