Avatar billede 7th Praktikant
12. marts 2003 - 00:35 Der er 21 kommentarer og
2 løsninger

Replace og RexExp

To spørgsmål.

1: Hvordan laver jeg en regexp som kan checke om et inputfelt kun indeholder bogstaver samt tal ? I behøves ikke at lave selve regexp for mig, det er mere hvordan man bruger den, altså sammenligne noget med en request.form("bla").

2: Jeg skal have lavet mig min egen replacer. Jeg har søgt og søgt, men ikke fundet noget der var skåret grundigt nok ud i pap for mig. Når jeg henter noget ud fra databasen vil jeg gerne køre en replacer/tagster funktion.

Jeg har fundet ud af at erstatte < med &lt, > med &gt og vbcrlf med <br>, men har skrevet det på en indviklet måde, så en funktion ville være bedre ;) Men jeg mangler stadigvæk noget, nemlig nedenstående som jeg bruger i php.

function replace_tekst ($tagster)
{
$tagster = eregi_replace ("\\[a]([^\\[]*)\\[/a\\]" , "<a href=\"\\1\" target=\"_blank\">\\1</a>" , $tagster);
$tagster = eregi_replace ("\\[a=([^\\[]*)\\]([^\\[]*)\\[/a\\]" , "<a href=\"\\1\" target=\"_blank\">\\2</a>" , $tagster);

$tagster = str_replace ("" , "<b>" , $tagster);
$tagster = str_replace ("
" , "</b>" , $tagster);
return $tagster;
}

Hvordan kan denne "lille" funktion omskrives til asp ?
Avatar billede mortrr Praktikant
12. marts 2003 - 00:37 #1
Nu skriver du vel din asp-sider i jscript, ikke?
Avatar billede jss Nybegynder
12. marts 2003 - 01:02 #2
Jeg anvender flg. funktion i ASP til at sikre at et felt i en formular kun indeholder bestemte værdier. Skriver fejlmeddelse hvis der er "ukorrekte" tegn.

'Funktion der validerer feltet mappenavn
Function CheckInput(inputstr)
    Dim regEx
    Set regEx = New RegExp
    regEx.Pattern = "^[a-zA-Z0-9 -]+$"
    regEx.IgnoreCase = True
    CheckInput = regEx.Test(inputstr)
End Function

Dim boolIngenFejl

  'Validere for korrekte tegn i mappenavn
  if len(Request.Form("bibliotek")) > 0 AND CheckInput(Request.Form("bibliotek")) = false Then
          Response.Write "Anvend kun bogstaverne a-z (A-Z), tallene 0-9, bindestreg og mellemrum i feltet <i><b>Filmappenavn</b></i> !<p>"
          boolIngenFejl = false
  end if
Avatar billede 7th Praktikant
12. marts 2003 - 01:16 #3
mortrr : jscript, hvad menes med det ?

jss : ser fornuftigt ud, men hvad betyder "len" som står i sætningen "if len(Request.Form("bibliotek"))" ?

Skal i seng nu, men checker op på det imorgen...
Avatar billede jss Nybegynder
12. marts 2003 - 01:19 #4
Len beregner længden af input, blankt/tomt felt --> Len = 0

"if len(Request.Form("bibliotek")) > 0 " betyder at jeg tjekker om der overhovedet er indtastet noget i feltet.
Avatar billede mortrr Praktikant
12. marts 2003 - 01:25 #5
Det er fordi jscript (javascript/ecmascript) jo svarer en hel del til php, mht syntax, så det burde være en hel del nemmere for dig at springe fra det ene til det andet.

Og det er hurtigere at omskrive fra det ene til det andet.
(syntes jeg - der er sikkert andre der mener det modsatte)

Nu er regular expressions ikke lige det bedste eksempel, men din funktion ville blive til følgende i jscript.

function replace_tekst (tagster)
{
tagster = tagster.replace(/\[a]([^\[]*)\[/a\]/gi , "<a href=\"\\1\" target=\"_blank\">\\1</a>");
tagster = tagster.replace(/\[a=([^\[]*)\]([^\[]*)\[/a\]/gi , "<a href=\"\\1\" target=\"_blank\">\\2</a>");

tagster = tagster.replace(/\[b\]/gi, "<b>");
tagster = tagster.replace(/[/b]/gi , "</b>");
return tagster;
}

Og jo - det er samme sprog som client-side javascript.
For at få fortolkeren til at se en asp-fil som jscript, indledes siden med:
<%@language=jscript%>
Eller sitet sættes til jscript som default (på serveren).
Avatar billede 7th Praktikant
12. marts 2003 - 01:32 #6
Ikke for at være besværlig ;), men jeg har altid fortrukket at afvikle mine funktioner på serverside, så hvis en anden kunne komme op med en regexp i asp ville det være bedre. Henvisning til et eksempel ala det jeg søger ville også være fint.
Avatar billede jss Nybegynder
12. marts 2003 - 01:36 #7
Mit eksempel er ren ASP - sig til hvis der noget jeg skal uddybe :-)
Avatar billede mortrr Praktikant
12. marts 2003 - 08:09 #8
7th -> Du har vist misforstået noget.
jscript ASP ER serverside.
vbscript er bare et af flere sprog man kan bruge i asp.
Det er bare det de fleste bruger, fordi der er nemt at lære.
Avatar billede 7th Praktikant
12. marts 2003 - 08:11 #9
Var lidt træt i aftes da jeg skrev det, anyway kigger på det senere...

jss : dit eksempel kunne ikke være meget bedre ;)
Avatar billede jss Nybegynder
12. marts 2003 - 10:30 #10
Takker for points !
Er glad for at mit eksempel passede så godt, herligt :)

/Janus
Avatar billede 7th Praktikant
12. marts 2003 - 10:41 #11
Kan du ikke komme med et eksempel på hvordan jeg får brugt funktionen

function replace_tekst (tagster)
{
tagster = tagster.replace(/\[a]([^\[]*)\[/a\]/gi , "<a href=\"\\1\" target=\"_blank\">\\1</a>");
tagster = tagster.replace(/\[a=([^\[]*)\]([^\[]*)\[/a\]/gi , "<a href=\"\\1\" target=\"_blank\">\\2</a>");

tagster = tagster.replace(/\[b\]/gi, "<b>");
tagster = tagster.replace(/[/b]/gi , "</b>");
return tagster;
}

i asp / jscript, da jeg ikke helt har fod på det endnu...
Skal jeg smide funktionen ind i et tomt asp dokument og så skrive <%@language=jscript%> før funktionen kommer eller ?
Avatar billede 7th Praktikant
12. marts 2003 - 10:45 #12
P.S. nogen der ved hvordan man indsætter flere replace tags i en regexp funktion som denne.

set regcode = New RegExp
regcode.pattern = "[b]"
regcode.global = true
regcode.ignoreCase = true
resultat = regcode.replace(str , "<b>")
set regcode = nothing
Avatar billede 7th Praktikant
12. marts 2003 - 17:14 #13
mortrr : jeg har prøvet dit script og gjort ligesom beskrevet i artikel
http://www.asp.dk/articles.asp?mode=show_article&article_id=170&tech_id=1, men den siger altså der er fejl i...

tagster = tagster.replace(/\[a]([^\[]*)\[/a\]/gi , "<a href=\"\\1\" target=\"_blank\">\\1</a>");
tagster = tagster.replace(/\[a=([^\[]*)\]([^\[]*)\[/a\]/gi , "<a href=\"\\1\" target=\"_blank\">\\2</a>");

tagster = tagster.replace(/\[b\]/gi, "<b>");
tagster = tagster.replace(/[/b]/gi , "</b>");

Kan man bare godt benytte en jscript funktion midt i noget asp ?
Avatar billede mortrr Praktikant
12. marts 2003 - 22:34 #14
Ja og nej.

Du kan ikke bare skifte efter for godt befindende midt i på en side.
Man vælger et sprog pr side.

Det er dog muligt at lægge script-blokke i et andet sprog på en side.

fx som:
<%@language=vbscript%>
<html>
<body>
<script language=jscript runat=server>
function showRandom() {
  return Math.random();
}
</script>
<%
response.write "Her er et tilfældigt tal: "  & showRandom()
%>
</body>
</html>

Her er hoved sproget vbscript, men der er lagt en enkel funktion ind i en server-side script blok som jscript.
Avatar billede 7th Praktikant
12. marts 2003 - 23:43 #15
Aahh det var også det jeg tænkte. Skal aflevere mit projekt imorgen, så kan ikke nå at lave om på noget nu, og det var egentlig der jeg skulle bruge funktionen til. Nå men afprøver lige noget og vender så tilbage...
Avatar billede mortrr Praktikant
12. marts 2003 - 23:56 #16
Årh for...
Er desværre ikke regExp haj i vbscript, men prøv lige med:

function replace_tekst(tagster)
    Dim regEx
    Set regEx = New RegExp
    regEx.IgnoreCase = True

    regEx.Pattern = "\[a\]([^\[]*)\[/a\]"
    tagster= = regEx.Replace(tagster,"<a href=""$1"" target=""_blank"">$1</a>")

    regEx.Pattern = "\[a=([^\[]*)\]([^\[]*)\[/a\]"
    tagster= = regEx.Replace(tagster,"<a href=""$1"" target=""_blank"">$2</a>")

    tagster = replace(tagster,"", "<b>");
    tagster = replace(tagster,"
","</b>");
    replace_tekst=tagster
}
Avatar billede mortrr Praktikant
12. marts 2003 - 23:57 #17
Den sidste } skal selvfølgelig være
end function
og fjern de to ;
Avatar billede 7th Praktikant
13. marts 2003 - 00:47 #18
Jeg har lige samlet mit eget regexp som umiddelbart virker fint, så skal skynde mig at få det tilføjet. Vender tilbage senere...
Avatar billede 7th Praktikant
13. marts 2003 - 10:48 #19
Jeg kunne ikke komme på nettet inat, da stofanet var nede. Anyway i sidste time lykkedes det mig via spørgsmål http://www.eksperten.dk/spm/327945 samt samt idegrundlaget fra mortrrs funktion at få skrabet en RegExp på benene som ser ud til at virke fint :)

set codeExp = new regExp
codeExp.global = true
codeExp.ignoreCase = true

codeExp.pattern = "<"
tekst = codeExp.replace (tekst , "&lt;")

codeExp.pattern = ">"
tekst = codeExp.replace (tekst , "&gt;")

codeExp.pattern = "(\[link\])(.*)(\[\/link\])"
tekst = codeExp.replace (tekst , "<a href=""http://$2" target=""_blank"">$2</a>")

codeExp.pattern = "(\[email\])(.*)(\[\/email\])"
tekst = codeExp.replace (tekst , "<a href=""mailto:$2"">$2</a>")

codeExp.pattern = "(\[b\])(.*)(\[\/b\])"
tekst = codeExp.replace (tekst , "<b>$2</b>")

codeExp.pattern = "(\[i\])(.*)(\[\/i\])"
tekst = codeExp.replace (tekst , "<i>$2</i>")

codeExp.pattern = "(\[u\])(.*)(\[\/u\])"
tekst = codeExp.replace (tekst , "<u>$2</u>")

set codeExp = nothing

mortrr du må gerne lægge et svar hvis du vil have del i points. Godt nok var din RegExp ikke helt ideelt til mit formål, men idegrundlaget kunne jeg sagtens bruge :)
Avatar billede mortrr Praktikant
13. marts 2003 - 11:19 #20
Jamen det vil jeg så gøre.
tak
Avatar billede 7th Praktikant
13. marts 2003 - 11:40 #21
Efter sådan en omgang asp programmering er jeg blevet endnu mere overbevist om hvor godt php virkelig er :o)

http://www.biim.frip.dk/cms/ - lavet på knap to uger helt fra scratch zero...
Avatar billede 7th Praktikant
13. marts 2003 - 11:40 #22
Takker iøvrigt for hjælpen, håber pointdelingen er retfærdig ;)
Avatar billede mortrr Praktikant
13. marts 2003 - 11:47 #23
Selv tak.

Om fordelingen er retfærdig er helt op til dig.
Vi aner jo reelt ikke hvad der har hjulpet dig.
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
Kurser inden for grundlæggende programmering

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