/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Hjælp til RegularExpression pattern til at~
Fra : Ukendt


Dato : 29-12-04 23:53

Jeg har en form til brugerinput og ønsker nu at fjerne alle HTML tags med
undtagelse af <I>, <B> og <U>. Det vil jeg gøre med Regular Expressions, men
må indrømme at jeg ikke kan kapere at sætte et fornuftigt pattern sammen, da
syntaxen her for mig er ret sort :)

Jeg har fundet følgende på nettet, som fjerner alle tags med undtagelse af
dem som begynder med <A og <B, dvs links og bold tekst tillades (og også
<BR>, men det er irrelevant).

RegularExpressionObject.Pattern = "(<[c-zC-Z][^>]*>)"

Er der en venlig sjæl der kan hjælpe med at sætte et pattern sammen således
at kun italic, bold og underline tags er tilladt, mens alle andre fjernes?



 
 
Jens Gyldenkærne Cla~ (30-12-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 30-12-04 23:34

<-= KG =-> skrev:

> Er der en venlig sjæl der kan hjælpe med at sætte et pattern
> sammen således at kun italic, bold og underline tags er
> tilladt, mens alle andre fjernes?

Jeg bruger denne funktion til kun at tillade <b> og <i>. Hvis du
vil have <u> med, skal du bare ændre [bi] til [biu]. Funktionen
køres efter at inddata har været gennem Server.HTMLencode (og
samtlige < og > dermed er konverteret til &lt; og &gt;).

Function addformat(tekst)
   dim regEx,strOut
   set regEx = New regExp
   regEx.IgnoreCase = True
   regEx.Global = True
   regEx.Pattern = "&lt;([/]*[bi])&gt;"
   strOut = regEx.replace(tekst, "<$1>")
   set regEx = nothing
   addformat = strOut
End Function
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Ukendt (31-12-2004)
Kommentar
Fra : Ukendt


Dato : 31-12-04 02:18

> Function addformat(tekst)
> dim regEx,strOut
> set regEx = New regExp
> regEx.IgnoreCase = True
> regEx.Global = True
> regEx.Pattern = "&lt;([/]*[bi])&gt;"
> strOut = regEx.replace(tekst, "<$1>")
> set regEx = nothing
> addformat = strOut
> End Function

Det fungerer fint, men kan ikke påstå jeg kan gennemskue hvordan det pattern
både kan spotte åbnings- og afslutningstags. Hvor defineres det for resten
at det _ikke_ skal være netop <B> og <I> der bliver replaced men alt andet,
og hvad er "<$1>" præcist?
Håber du gider give en kort forklaring.



Jens Gyldenkærne Cla~ (31-12-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 31-12-04 16:16

<-= KG =-> skrev:

>> regEx.IgnoreCase = True

Linjen her sørger for at html-koder fanges uanset versalering
(altså at både <b> og <B> vil virke).

>> regEx.Pattern = "&lt;([/]*[bi])&gt;"

Det her er det vigtigste i funktionen. Starten og slutningen er
bare normal tekst - hhv. &lt; og &gt;. Det er skrevet sådan fordi
Server.HTMLencode (der skal køres før funktionen) ændrer < til &lt;
og > til &gt;.

Parentesen bruges til at oprette en reference til det der er inde i
den. Det bruges når man laver erstatningen. Inde i parentesen står
følgende: [/]*[bi]. Klammerne angiver tegngrupper, hvor der bare
skal bruges ét tegn fra klammen. Stjernen (*) betyder 0 eller flere
af det foregående - altså her tegnet "/". Det er derfor at der både
matches start og slutkoder.


>> strOut = regEx.replace(tekst, "<$1>")

Replace-kommandoen erstatter alle matches i første parameter
(tekst) med den anden parameter ("<$1>"). $1 henviser til
parentesen i det regulære udtryk - det er bl.a. derfor at regulære
udtryk kan bruges til meget mere end en normal søg og erstat-
kommando.


> Det fungerer fint, men kan ikke påstå jeg kan gennemskue
> hvordan det pattern både kan spotte åbnings- og
> afslutningstags.

Som nævnt ovenfor er det stjernen der gør tricket. Man kunne
faktisk også have brugt spørgsmålstegn - som betyder 0 eller 1 af
det foregående.


> Hvor defineres det for resten at det _ikke_
> skal være netop <B> og <I> der bliver replaced men alt andet,

Det fungerer omvendt. Først "tekstliggøres" alle html-koder med
Server.HTMLencode (< og > erstattes med &lt; og &gt;). Bagefter
ændres &lt; og &gt; tilbage til < og >, men kun for de tilladte
koder.

Du kan finde mange flere oplysninger om regulære udtryk her:
<http://www.regular-expressions.info/>

Man kan også finde en dansk introduktion til emnet som pdf:
<http://www.emu.dk/gym/fag/dl/inspiration/noter/regexp.pdf>
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste