webForumDet fria alternativet

Bryta efter det senaste ordet innan max 30 tecken?

ASP

10 svar · 604 visningar · startad av magnusfeldth

Medlem sedan jan. 20034 480 inlägg
Frågan#1

Jag skriver ut en rubriktext nu väldigt enkelt med en begränsning på max 30 tecknen genom att bara tillåta de första 30 tecknen att skrivas ut - men då kan den ibland bryta mitt i ett ord vilket får följden att det ser ut så här:

"Riskkapitalisterna har va..."

Men hur gör jag om jag istället vill att den bryter vid närmaste ord? Så resultatet enligt ovan skulle bli:

"Riskkapitalisterna har"

så här tafflig ser min kod ut i nuläget

<%=left(Ucase(RecSet3("rubrik")),30)%>...&nbsp;

hilfe bitte. sökte i forumet, men inget passade bra :(

Medlem sedan aug. 20039 340 inlägg
#2

Lite regex åt herrn:

/^(.{0,30})(\s|$)/

0-30 valfria tecken följt av blankteceken eller slutet av strängen.

Medlem sedan jan. 20034 480 inlägg
#3

oj, vad jag är kass på regex.... hur får jag in det i koden? måste jag inte skriva en massa strString = Replace(strString, """", """) och sånt?

Medlem sedan aug. 20039 340 inlägg
#4
 Set rubrikregex = New RegExp
 rubrikregex.Pattern = "^(.{0,30})(\s|$)"
 Set match0 = rubrikregex.Execute(rubrik)
 Set subMatches = match0.Submatches

 if subMatches(1) = "" then
  kortrubrik = subMatches(0)
 else
  kortrubrik = subMatches(0) & "..."
 end if

Något sådant... Match0 motsvarar vad hela uttrycket matchar. subMatches(0) är de utplockade max 30 tecknen. subMatches(1) är det som kommer efteråt. Om det inte finns något efteråt så är subMatches(1) = "", annars är subMatches(1) = något blanktecken som kommer efter texten. Detta kollar if-satsen eller och lägger till ... bara om det är nödvändigt.

Medlem sedan jan. 20034 480 inlägg
#5

Behöver jag starta med nån function? Behöver rubrikregex dimmas, och kanske nåt ytterligare? Och slutligen skriver jag ut med write.kortrubrik eller?

Medlem sedan aug. 20039 340 inlägg
#6

Jag pusslar ihop grejer frå Google-sökningar. Koden kanske inte kommer funka alls. :)
Jo, variablerna ska tydligen Dimmas.

Vad menar du med att skriva ut? Response.Write(kortrubrik) är väl det gängse sättet.

Medlem sedan jan. 20034 480 inlägg
#7

satte ihop det så här:

<%
dim kortmodell

Set modellregex = New RegExp
 modellregex.Pattern = "^(.{0,30})(\s|$)"
 Set match0 = modellregex.Execute(modell)
 Set subMatches = match0.Submatches

 if subMatches(1) = "" then
  kortmodell = subMatches(0)
 else
  kortmodell = subMatches(0) & "..."
 end if
%>
<%response.write(kortmodell)%>

och felmesset blev så här

Microsoft VBScript runtime  error '800a01b6'

Object doesn't support this property or method: 'subMatches'

och hänvisar till rad 83, vilket är den med Set subMatches = match0.Submatches

Medlem sedan aug. 20039 340 inlägg
#8

Så där kanske?

<%
dim kortmodell

Set modellregex = New RegExp
 modellregex.Pattern = "^(.{0,30})(\s|$)"
 Set firstMatch = modellregex.Execute(modell)
 Set subMatches = firstMatch(0).Submatches

 if subMatches(1) = "" then
  kortmodell = subMatches(0)
 else
  kortmodell = subMatches(0) & "..."
 end if
%>
<%response.write(kortmodell)%>
Medlem sedan jan. 20034 480 inlägg
#9

Ja, nu blev det i vart fall inget felmeddelande, men samtidigt skrivs inget ut över huvud taget - kanske den inte får infon från databasen korrekt?

detta är koden för att öppna dbn jag använder:

Set RecSet3 = Server.CreateObject("ADODB.Recordset")
                Visa3 = "SELECT * FROM bildb WHERE visa = 'ja'"
                
                RecSet3.Open Visa3, Connect, adOpenStatic, adLockOptimistic
Medlem sedan juni 20019 519 inlägg
#10

Skapar en funktion som du kallar på:

Function BreakString(str, length)
	Set modellregex = New RegExp
	modellregex.Pattern = "^(.{0," & length & "})(\s|$)"
	Set firstMatch = modellregex.Execute(str)
	Set subMatches = firstMatch(0).Submatches

	if subMatches(1) = "" then
		BreakString = subMatches(0)
	else
		BreakString = subMatches(0) & "..."
	end if

	Set modellregex = Nothing
End Function

Och Anropar den:

Response.Write(BreakString(RecSet3("FieldName"), 30))

Den kod du bifogar nu säger inget direkt, du visar bara att du skapar upp ett Recordset, du måste ju göra något med ditt Recordset för att något skall visas.

Medlem sedan jan. 20034 480 inlägg
#11

Tack voigtann1 och Nitro2K01! Nu funkar det!

255 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)