Lite regex åt herrn:
/^(.{0,30})(\s|$)/
0-30 valfria tecken följt av blankteceken eller slutet av strängen.
10 svar · 604 visningar · startad av magnusfeldth
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)%>...
hilfe bitte. sökte i forumet, men inget passade bra :(
Lite regex åt herrn:
/^(.{0,30})(\s|$)/
0-30 valfria tecken följt av blankteceken eller slutet av strängen.
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?
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.
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?
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.
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
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)%>
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
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.
Tack voigtann1 och Nitro2K01! Nu funkar det!