Avatar billede padrino Nybegynder
18. august 2009 - 20:35 Der er 10 kommentarer

Hjælp med RegularExpressionValidator

Hej Eksperter,

Jeg har et rich text felt (RadEditor.Net2) med en RegularExpressionValidator tilknyttet. I dette rich text felt må der indtastes max 60 tegn og mit problem er så at rich text-feltet selvfølgelig tilføjer en masse html tags når man vælger en anden skrifttype og farve.

Pt. har jeg denne her på min validator:
ValidationExpression="^[\s\S]{0,60}$"
men her tælles kun antal karaktere - jeg har ikke kunne finde noget som fjerne html tags (og alle attributer) og derefter tæller antal karaktere.

Jeg ved godt at det kan løses i codebehind, men dette er ikke ønsket så hvordan kan jeg opnår den ønskede validering med RegEx og RegularExpressionValidator?
Avatar billede Syska Mester
18. august 2009 - 20:50 #1
alt html er vel gjort af start og slut tag ... eller i samme.

http://www.webpronews.com/expertarticles/2006/12/01/aspnet-remove-html-tags-from-a-string

http://geekswithblogs.net/narent/archive/2007/05/01/112135.aspx

Der findes mange ... :-)

Men intet er jo bullet proof.

// ouT
Avatar billede windcape Praktikant
18. august 2009 - 22:02 #2
Tjoo, <.*?> ville være temmelig bulletproof. Men hvorfor overhovedet tillade HTML/RichText hvis du har en maximum begrænsning på tegn? Det giver overhovedet ikke mening.
Avatar billede padrino Nybegynder
18. august 2009 - 22:17 #3
Okay .. Det er teksten (dvs det reelle indhold) der max må være 60 karakterer, hvorfor al html skal sorteres fra under optællingen. Dvs. hvis du skriver en tekst (som design mæssigt er fastsat til at være på max 60 karakterer) og rammer de 60 karakter og derefter vælger at teksten skal være blå, så skal fx <font color="blue"> og </font> ikke tælles med, da det indtastede ville være over 60 karakterer, selvom den indtastede tekst ikke er det.
Det eneste der må tælle i optællingen er teksten, hvorfor jeg skal bruge lidt regex guf til at "fjerne" html tags under optælling.

Giver det mening?
Avatar billede padrino Nybegynder
18. august 2009 - 22:18 #4
Du foreslår altså følgende løsning (?):
ValidationExpression="<.*?>^[\s\S]{0,60}$"
Avatar billede Syska Mester
18. august 2009 - 22:38 #5
nej ... windcape gør ...

Men du skal sortere fra først ... og derefter tælle hvad der er tilbage ... du kan sikkert gøre det på en funky måde.

Men gør som de gør i de 2 links ... hvad der er tilbage af tager du bare længden af ...

windcape:
hmmm, vil den regex virke ... altså:
. = any
* = zero or many match
? = one match
Kan man godt gruppere dem sådan ... ?
Det er vel det samme som "<.+>" ?

// ouT
Avatar billede windcape Praktikant
18. august 2009 - 23:22 #6
Tjah?


Microsoft Windows [Version 6.0.6002]
Copyright (c) 2006 Microsoft Corporation.  All rights reserved.

C:\Users\Administrator>csharp
using System.Text.RegularExpressions;

Console.WriteLine(
    (new Regex("<.*?>",
        RegexOptions.Multiline | RegexOptions.IgnoreCase)
    ).Replace("<html><body><font>hai</body></html>","")
);
hai
Avatar billede Syska Mester
18. august 2009 - 23:54 #7
Nu er mine Regex skills ikke i toppen har jeg så lige fundet ud af ... dog havde jeg heller ikke regnet med det :-) ... men hvad katten sker der lige ... hvordan kan det være den stopper og ikke tager det hele.

Der er vist noget jeg mangler i min viden her ... hvis "." matcher any char ... og så med "*" efter ... så er det 0 til mange gange ...

Hvad kommer "?" så til at dække over ... de 2 forige, altså ".*" ... men hvordan kan det være den ikke tage de "<> med som any char nu jeg tænker over det :-s ?

mvh
Avatar billede windcape Praktikant
19. august 2009 - 00:00 #8
Hvis du kender lidt til UML:

* = mange
? = optional

.* = nul-til-mange
+* = 1-til-mange
Avatar billede windcape Praktikant
19. august 2009 - 00:01 #9
Hov, det blev lidt rodet den besvarende det.

* = mange
? = optional
. = nul eller flere
+ = 1 eller flere
Avatar billede Syska Mester
19. august 2009 - 02:12 #10
okay ...

Jeg har samme forståelse for *,? og + ( 3 stk )

Men (dot) går galt i min verden ... er det ikke et non white space character ? efter fulgt er en af overstående 3 operators ?

Men det var nu også mere hvorfor den regex virker ... og den ikke bare tager fra start til slut ... da hele stringen jo også ender på et ">"

// ouT
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester