Avatar billede stry Nybegynder
26. februar 2006 - 15:16 Der er 13 kommentarer og
1 løsning

Trim tlf-nr

Jeg udlæser tlf-nr fra en htm.-fil og formatet kan variere så jeg har brug for en funktion som kan trimme det så jeg får et ens output.
Her er to variationer:
"+45 3300 0000"
"33000000"

...og de skulle gerne ende med at se således ud:
"+45 33 00 00 00"
"+45 33 00 00 00"

Nogen med en hurtig løsning?
På forhånd tak.
Avatar billede thesurfer Nybegynder
26. februar 2006 - 15:30 #1
Hvilke andre variationer kan der være?

/theSurfer
Avatar billede stry Nybegynder
26. februar 2006 - 15:32 #2
"3300 0000" kan også forekomme.
Avatar billede thesurfer Nybegynder
26. februar 2006 - 15:34 #3
Og tlf.nr. er altid på 8 cifre (hvis man ikke tæller "+45) med) ?

/theSurfer
Avatar billede stry Nybegynder
26. februar 2006 - 15:35 #4
Jeps...
Avatar billede thesurfer Nybegynder
26. februar 2006 - 16:10 #5
Dim s, i, j, prefix
Dim tmp, tlfnr

' Jeg har valgt at lave en array, til at simulere nogle telefonnumre:

s = "+45 3300 0000¤33000000¤1234 5678" ' eksempler på numre
s = Replace(LCase(s), " ", "")
s = Replace(LCase(s), " ", "")
' Nu er strengen lig: "+4533000000¤33000000¤33000000"

s = split(s, "¤")

For i = 0 To UBound(s)
    prefix = "+45 " ' prefix, som indsættes foran tlf.nr.. husk mellemrum
    tmp = s(i) ' indeholder hele telefon nummeret
    tmp = Replace(tmp, "+45", "") ' fjern +45 så vi kun skal arbejde med tlf.nr.
   
        tlfnr = ""
    For j = 1 To 4
        tlfnr = tlfnr & mid(tmp, (j * 2) - 1, 2) & " "
    Next
        tlfnr = left(tlfnr, len(tlfnr) - 1)
        tlfnr = prefix & tlfnr

        msgbox "tlfnr: " & tlfnr & "<br>"
        'response.write "tlfnr: " & tlfnr & "<br>"
Next

/theSurfer
Avatar billede thesurfer Nybegynder
26. februar 2006 - 16:11 #6
Der skulle ha' stået:

' Nu er strengen lig: "+4533000000¤33000000¤12345678"

Men det er lige meget, da det er en kommentar.. :-)

/theSurfer
Avatar billede thesurfer Nybegynder
26. februar 2006 - 16:17 #7
Hehe.. og en ASP misser :-)

Der skulle ha' stået:
        msgbox "tlfnr: " & tlfnr & vbCrLf
:-)

/theSurfer
Avatar billede stry Nybegynder
26. februar 2006 - 16:31 #8
Kigger lige på det og vender tilbage....
Avatar billede stry Nybegynder
26. februar 2006 - 16:44 #9
Det ser fint ud og virker efter hensigten.

Kan 's = Replace(LCase(s), "&nbsp;", "")' ændres således at man fjerner alle ikke nummeriske tegn, i stedet for kun den eksakte frase "&nbsp;"?

Smid et svar så du kan få dine point :-)
Avatar billede thesurfer Nybegynder
26. februar 2006 - 17:50 #10
Så skal man ud i noget RegExp, hvilket ikke er min stærke side.. Men man kunne også lave en loop, der kørte fra 0 og til længden af strengen..
Denne loop skal checke "nuværende" tegns CHR værdi.. CHR værdien skal så ligge i "0-9"-området.. hvis ikke, fjernes tegnet..

Laver lige en loop til dig..

- Svar.

/theSurfer
Avatar billede thesurfer Nybegynder
26. februar 2006 - 17:50 #11
Man kan vist også bare brug IsNumeric.. laver lige loopen..

/theSurfer
Avatar billede thesurfer Nybegynder
26. februar 2006 - 18:04 #12
Sådan:

Dim s, i, j, prefix
Dim tmp, tlfnr

' Jeg har valgt at lave en array, til at simulere nogle telefonnumre:

s = "+45 3300&nbsp;0000¤3300a0b00c0¤1234&nbsp;5678" ' eksempler på numre
s = split(s, "¤")

For i = 0 To UBound(s)
    prefix = "+45 " ' prefix, som indsættes foran tlf.nr.. husk mellemrum
    tmp = s(i) ' indeholder hele telefon nummeret
    tmp = Replace(tmp, "+45", "") ' fjern +45 så vi kun skal arbejde med tlf.nr.

    for j = len(tmp) to 1 step -1
        ' Denne linie fjerne alle tegn pånær tal
        if IsNumeric(mid(tmp, j, 1)) = false then    tmp = replace(tmp, mid(tmp, j, 1), "")
    next
   
    tlfnr = ""
    For j = 1 To 4
            tlfnr = tlfnr & mid(tmp, (j * 2) - 1, 2) & " "
    Next
    tlfnr = left(tlfnr, len(tlfnr) - 1)
    tlfnr = prefix & tlfnr

    msgbox "tlfnr: " & tlfnr & "<br>"
    'response.write "tlfnr: " & tlfnr & "<br>"
Next

/theSurfer
Avatar billede bak Forsker
26. februar 2006 - 21:29 #13
Kun som en kommentar til thesurfer udemærkede kode. Her er den med regex

Function PhoneNo(s As String) As String
Dim RegEx As Object, temp As String
  Set RegEx = CreateObject("vbscript.regexp")
  With RegEx
      .Global = True
      .Pattern = "[^\d]+"
  End With
  temp = RegEx.Replace(s, "")
  If Len(temp) = 8 Then PhoneNo = Format("45" + temp, "+## ## ## ## ## ##") Else PhoneNo = Format(temp, "+## ## ## ## ## ##")
  Set RegEx = Nothing
End Function


Sub test4()
Dim st As String
  st = "+45 3300&nbsp;0000"
  st = PhoneNo(st)
  MsgBox st
End Sub
Avatar billede stry Nybegynder
27. februar 2006 - 14:08 #14
Kanon!, tak for hjælpen.
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