Håller på med en lite "replace" av smileys. Några enlka mönster ersätter t.ex. ;) med en bild. Så långt inga problem. Men eftersom jag kör Server.HTMLEncode innan jag presenterar texten så blir t.ex. ö = ö. Om man då avslutar en mening med ett ö och en parentes direkt efter, typ "ö)" så blir det en smiley i stället för parentesen. Ska jag skriva ett mönster som tar hänsyn till om det är två semikolon i rad (i så fall hur?) eller ska jag angripa problemet på något annat sätt? Du kan använda Lookbehind och Lookahead i Regular Expressions för att bestämma om den ska fånga något eller inte. Det fanns en del matnyttigt på den länken. Det jag söker är "hitta x som inte har ett y framför sig". Jag kom fram till att detta borde fungera: Det finns ju en del specialtecken som man måste hantera... Ja du kan göra som dom skrivit men du skulle också kunna ändra koden för att få smileys innan du ändrar ö o.s.v. Det kan han inte göra för om han kör HTMLEncode på texten efter att han bytt ut tex ;) mot en html tag kommer den att skriva ut HTML taggen, inte ladda bilden... Ja men HTMLEncode ändrar väl inte å ä ö... Det måste du väl göra själv? Varför ha en smiley som "kräver" tangentbord med Ö? Förutsätter du enbart svenska besökare? Du har nog missuppfattat frågeställningen. Han har ingen smiley som innehåller ö. Det man skulle kunna göra är ju att ändra då man skriver ut koden... inte sparar den i databasen. Han skriver ju ut texten när han presenterar den... * Gör smily ersättningen. Varför krångla till det? Har varit borta från tråden ett tag men märkte tacksamt att problemlösning har pågått. Tyvärr får jag samma felmeddelande på ditt tidigare förslag. När jag testar lite alternativ så verkar det skita sig när tecknet < kommer in i bilden. Kan det vara olika stöd för just lookbehind? Lookahed funkar fint, men det hjälper ju tyvärr inte mig. Vad jag vet borde Lookbehind stödjas av Regular Expressions även i ASP. Jag chansar på att Lookaround inte stödjs. Det är därför jag föreslår en alternativ lösning: Jag jämför inte, men eftersom han, som jag minns det, skrev att Lookahead fungerar borde Lookbehind även det också fungera... Det är ofta Lookaround inte nämns för det är en rätt så avancerad sak att både skriva och beskriva samt hantera... Hej! En till funktion för samma sak från mig, kanske lite enklare och tydligare... Tack för hjälpen allihop. Det kommer att dröja lite innan jag har möjlighet att testa förslagen på funktioner men eftersom vi har rett ut att att lookbehind tydligen inte fungerar i mitt fall så markerar jag tråden som löst för min del. Lägger in en blänkare när jag har fixat funktionen också.HTMLEncode och RegExp
Sv: HTMLEncode och RegExp
Gör en sökning på google så hittar du nog en hel del exempel.
Det finns även väldigt mycket matnyttigt på www.regular-expressions.info.
Mvh,
Thomas VanhaniemiSv: HTMLEncode och RegExp
<code>
ra.pattern = "((?<!;);\))"
sOrigMessage = ra.Replace(sOrigMessage, ";<img border=""0"" src=""grafik/blink.gif"" width=""16"" height=""16"">")
</code>
Men jag får Syntax error in regular expression. Någon som ser felet, eller finns olika serverstöd för dessa funktioner?Sv: HTMLEncode och RegExp
En del är \ ( ) [ + ? .
Förstår jag dig rätt om du vill ersätta alla matchar på ;) där det inte föregås av ϧ till exempel?
Testa följande...
<code>
ra.pattern = "((?<!&#\d+);\))"
sOrigMessage = ra.Replace(sOrigMessage, "<img border=""0"" src=""grafik/blink.gif"" width=""16"" height=""16"">")
</code>
Ovanstående kod borde fungera, har däremot inte testat den så säg till om det krånglar eller om du vill ha mer hjälp med något!
Mvh,
Thomas VanhaniemiSv: HTMLEncode och RegExp
Sv: HTMLEncode och RegExp
Mvh,
Thomas VanhaniemiSv: HTMLEncode och RegExp
Så om han skulle ha smilys direkt efter så skulle det väl funka?Sv: HTMLEncode och RegExp
Sv: HTMLEncode och RegExp
Det är när ö kodats som ö och följs av en parentes som det blir ö) och de sista två tecknen felaktigt omvandlas till en smiley.Sv: HTMLEncode och RegExp
Borde inte det hjälpa?Sv: HTMLEncode och RegExp
Anledningen till att han använder Server.HTMLEncode är ju för att användaren inte ska kunna skriva in HTML kod.
Alla möjliga specialtecken ändras till t.ex. formen þ.
I databasen står det troligen ö istället för dess motsvarighet i formen ovan...
Mvh,
ThomasSv: HTMLEncode och RegExp
* Kör HTMLEncode.
* Ersätt < och > image taggarna för dina smileys. t. ex.
<code>
Function UnescapeSmilies(Value)
Dim RegExp As RegExp
Set RegExp = New RegExp
RegExp.Global = False
RegExp.Pattern = "<(img border=""0"" src=""(grafik/blink\.gif|grafik/normal\.gif|grafik/happy\.gif)"" width=""16"" height=""16"")>"
UnescapeSmilies = RegExp.Replace(Value, "<$1>")
End Function
</code>Sv: HTMLEncode och RegExp
Koden jag skickat tidigare fungerar bra, använder Lookaround i Regular Expressions...
Mvh,
ThomasSv: HTMLEncode och RegExp
Sv: HTMLEncode och RegExp
Vad får du för felmeddelande?
Kan det inte vara något annat ställe som orsakar felet?
Hur går du tillväga när du hanterar texten?
När jag testade att få träffar i ett litet program jag skivit i VB.NET fungerade det finfint, träffade "Text;)" men inte till exempel "ê)".
Är du säker på att du hanterar RegExp rätt?
Mvh,
ThomasSv: HTMLEncode och RegExp
Om du ser efter hos microsoft:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vspropattern.asp
Så ser du att det inte nämner Lookaround.
Att det är implementerat i VB.NET betyder inte att det funkar i VBScript i ASP. Så jag förstår inte varför du gör den jämförelsen. Äpplen är inte päron även om de påminner om varandra.Sv: HTMLEncode och RegExp
Nämnde bara att programmet är skrivet i VB.NET för att förtydliga att jag inte har haft samma förhållanden när jag testade mönstret...
Mvh,
ThomasSv: HTMLEncode och RegExp
Man måste komma in på lite mer "avancerade" sidor för att få ordentliga beskrivningar...
Verkade som att Microsofts sida var en lite mer "ta på ytan" presentation för att man ska komma igång.
Men jag säger inte att Lookaround fungerar i VBScript RegExp för det har jag inga egna erfarenheter kring.
Mvh,
ThomasSv: HTMLEncode och RegExp
Nu har jag testat lite med RegExp i VBScript och kommit fram till att Lookahead fungerar bra men Lookbehind stödjs inte, tyvärr...
Så du får köra med en liknande funktion som Andreas postade.
<code>
Private Function Fixtext(Text)
Dim RegExp
Set RegExp = New RegExp
Text = Replace(Text, ";)", "<img border=""0"" src=""grafik/blink.gif"" width=""16"" height=""16"">")
Text = Server.HTMLEncode(Text)
RegExp.Pattern = "<img border="(\d+)" src="(.+?)" width="(\d+)" height="(\d+)">"
RegExp.Global = True
RegExp.IgnoreCase = True
Text = RegExp.Replace(Text, "<img border=""$1"" src=""$2"" width=""$3"" height=""$4"">")
Set RegExp = Nothing
Fixtext = Text
End Function
</code>
Mvh,
ThomasSv: HTMLEncode och RegExp
<code>
Private Function Fixtext(Text)
Dim RegExp
Set RegExp = New RegExp
RegExp.Global = True
RegExp.IgnoreCase = True
'Ersätt smileys som ;) :\ =/ med ;-) :-\ och =-/ etc...
RegExp.Pattern = "([;:=])([\(\)/\\])"
Text = RegExp.Replace(Text, "$1-$2")
'Kör HTMLEncode
Text = Server.HTMLEncode(Text)
'Ersätt smileys med bilder
Text = Replace(Text, ";-)", "<img border=""0"" src=""grafik/blink.gif"" width=""16"" height=""16"">")
'Text = Replace(Text, ":-)", "<img border=""0"" src=""grafik/smile.gif"" width=""16"" height=""16"">")
'Text = Replace(Text, ":-/", "<img border=""0"" src=""grafik/sad.gif"" width=""16"" height=""16"">")
'etc...
Set RegExp = Nothing
Fixtext = Text
End Function
</code>
Mvh,
ThomasSv: HTMLEncode och RegExp