Avatar billede kimlarsen1978 Nybegynder
14. juli 2007 - 16:20 Der er 16 kommentarer og
2 løsninger

Replace alle tegn der ikke er tal eller bogstaver

Hejsa
Hvordan laver jeg en replace der tager alle tegn der ikke er A til Å eller 0 til 9 og erstatter dem med BLANK?

*****************
strTest = "'/<<>>Dette er min streng med en masse tegn {] som jeg gerne vil fjerne så der kun er bogstaver og tal tilbage"

nyStrTest = replace(strTest,????????????,"")
******************

Takker
Avatar billede coderdk Praktikant
14. juli 2007 - 16:23 #1
Regexp! :)

strTest = "'/<<>>Dette er min streng med en masse tegn {] som jeg gerne vil fjerne så der kun er bogstaver og tal tilbage"

Set RegularExpressionObject = New RegExp

With RegularExpressionObject
  .Pattern = "[^a-z0-9æøåÆØÅ]"
  .IgnoreCase = True
  .Global = True
End With

ReplacedString = RegularExpressionObject.Replace(InitialString, "")

Response.Write InitialString & " er nu " & ReplacedString
Avatar billede nielle Nybegynder
14. juli 2007 - 17:15 #2
Jeg gætter på at eksisterende blank tegn skal have lov til at blive?

.Pattern = "[^a-z0-9æøåÆØÅ ]"

Muligvis skal også '.', ',' og andre sætnings-tegn have lov til at blive:

.Pattern = "[^a-z0-9æøåÆØÅ;,:.!? ]"
Avatar billede kimlarsen1978 Nybegynder
14. juli 2007 - 18:40 #3
Tak for det. Når man skriver a-z har man så også de store bogstaver med eller skal der også A-Z ind? Og tillader A-Z også tegnet -

?
Avatar billede nielle Nybegynder
14. juli 2007 - 18:44 #4
Det er ".IgnoreCase = True" som gør at løsningen inkludere store og små bogstaver.

A-Z inkludere ikke '-' tegnet.
Avatar billede kimlarsen1978 Nybegynder
14. juli 2007 - 18:49 #5
okay - undrede mig bare over at ÆÅØ er nævnt med både store og små
Avatar billede kimlarsen1978 Nybegynder
14. juli 2007 - 18:51 #6
... og lige en ting til, hvordan gør man så man istedetfor at angive de tegn der skal blive angiver dem som skal fjernes?
Avatar billede nielle Nybegynder
14. juli 2007 - 18:57 #7
Æ, ø, og å behandeles særskildt da de ikke er med i det engelske alfabet. Derfor kan man ikke være sikker på at IgnoreCase sikre at f.eks. æ og Æ behandles ens.

Det er det lille ^-tegn lige efter den indledende [ som gør at mønsteres fortolkes som: "alle tegn, pånær de viste som skal udskiftes". Hvis dette ikke er der, så fortolkes den som "alle de viste tegn":

.Pattern = "[]['/<>]"

Læg specielt mærke til at ] skal stå lige efter [ da det ellers ville blive fortolket som afslutningen på listen.
Avatar billede kimlarsen1978 Nybegynder
14. juli 2007 - 19:09 #8
Okay, tak for hjælpen!
Jeg ville gerne bruge dette fra et SQL stament, men det virker ikke helt som jeg håbede, jeg har lavet en function:

*************
Function regUsePatternOnString(strTekst, strPattern)
    Set RegularExpressionObject = New RegExp

    With RegularExpressionObject
    .Pattern = strPattern
    .IgnoreCase = True
    .Global = True
    End With
   
    regUsePatternOnString = RegularExpressionObject.Replace(strTekst, "")
End Function
**********************

også vil jeg i min "ORDER BY" anvende denne:

**********************
SELECT tid, overskrift, id From news ORDER BY regUsePatternOnString(overskrift,'[^a-z0-9æøåÆØÅ]') ASC, tid
**********************

men den mener ikke funtionen findes fordi den leder efter den i DB'en:

**********************
[MySQL][ODBC 3.51 Driver][mysqld-5.0.27-standard]FUNCTION db.regUsePatternOnString does not exist
***********************

Kan jeg anvende den på denne måde og i så fald hvordan skal det gøres?
Avatar billede nielle Nybegynder
14. juli 2007 - 19:14 #9
Løsningen er jo ASP-kode, og det kan SQL ikke forstå. Du kan ikke bruge den metode til at sortere dit udtræk.

Nogen databaser har dog en indbygget RegEx motor, og hvis du er så heldig kan demme muligvis bruges.
Avatar billede nielle Nybegynder
14. juli 2007 - 19:21 #10
Eftersom du bruger MySQL er du heldig:

http://dev.mysql.com/doc/refman/5.0/en/regexp.html
Avatar billede kimlarsen1978 Nybegynder
14. juli 2007 - 19:42 #11
Okay cool nok, men hvordan kompinere jeg det med en replace? For den returnere jo kun true eller false - 1 eller 0?

overskrift, REGEXP '[^a-z0-9æøåÆØÅ]'

giver 0 eller 1, jeg har prøvet med:

replace(overskrift, REGEXP '[^a-z0-9æøåÆØÅ]','')

Men det virker ikke
Avatar billede nielle Nybegynder
14. juli 2007 - 19:46 #12
Der var et link på siden som muligvis giver dig det du leder efter:

http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html
Avatar billede kimlarsen1978 Nybegynder
14. juli 2007 - 19:58 #13
Hmm, det liger ikke helt det. Jeg læser det som om guide til hvordan man bruger REGEXP i sin WHERE - altså finde poster der matcher et REGEXP... Hmm...
Avatar billede kimlarsen1978 Nybegynder
14. juli 2007 - 20:24 #14
Avatar billede kimlarsen1978 Nybegynder
14. juli 2007 - 20:25 #15
Jeg vil gerne giver jer point for jeres hjælp...
Svar bitte :)
Avatar billede coderdk Praktikant
14. juli 2007 - 21:58 #16
(c:
Avatar billede nielle Nybegynder
14. juli 2007 - 22:57 #17
:o)
Avatar billede kimlarsen1978 Nybegynder
14. juli 2007 - 23:10 #18
:)
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