Avatar billede itcon Nybegynder
10. oktober 2002 - 16:49 Der er 12 kommentarer og
1 løsning

Check emailadresseformat

Er der nogen som kan hjælpe med en funktion/query som løber en tabel igennem og checker om et felt indeholder en gyldig email-adresse - altså om tekstrengen overholder reglerne for opbygning af en emailadresse ?

pft

:) Michael
Avatar billede sjap Praktikant
10. oktober 2002 - 20:56 #1
Er der en eller anden officiel standard, eller skal det blot kontrolleres at adressen kun indeholder tegn fra det engelske alfabet, et @ og evt. punktummer?
Avatar billede itcon Nybegynder
11. oktober 2002 - 08:43 #2
Jeg ved ikke om der findes en officiel standard, men ja det er jo kun engelske karakterer, samt nogle få special tegn (underscore, tankestreg mv), men der skal også testes for at der ex ikke er to punktummer efterhinanden, at adressen ikke ender på et punktum, at der forefindes kun en snabel.....lige nu løber jeg bare tabellen igennem med en række qu's som hver checker for div uregelmæssigheder, men dels er det ikke særligt elegang, og dels er jeg ikke sikker på at få dækket alle tilfælde.
Avatar billede hugopedersen Nybegynder
11. oktober 2002 - 08:45 #3
Følgende kan gøre noget af det du ønsker.  Måske skal du videreudvikle lidt på det.
Jeg har ikke gjort det da jeg kun lige havde behov for denne del. Resten gør jeg ved at checke at adressen findes i OutLokk adressebogen. Men det er en helt anden kode.

Public Function fhpIsValidEmail(strAddress As String) As Boolean
' -----------------------------------------------------------------------------------
' Purpose      : Check if a e-mail address is OK - spelling
' Called from  :
' Returns      :
' Remarks      :
' -----------------------------------------------------------------------------------
  Dim intX As Integer                                        'Counter
  Dim intY As Integer                                        'Counter
  Dim strTemp As String                                      'Part of address
 
  fhpIsValidEmail = False                                    'Default = not a valid e-mail
  intX = 0                                                    'Initialise variable
  intY = 0                                                    'Initialise variable
 
  For intX = 1 To Len(strAddress)                            'Loop whole address
    If Mid(strAddress, intX, 1) = "@" Then                    'Check for @
      intY = intY + 1                                        'Count
    End If
  Next intX
  If intY > 1 Then                                            'If found more than one @
    Exit Function                                            'Not valid in e-mail
  End If
 
  intX = InStr(strAddress, "@")                              'Find the @ char
  If (intX > 0) Then                                          'If found not next to .
    If (Mid(strAddress, intX - 1, 1) <> ".") And (Mid(strAddress, intX + 1, 1) <> ".") Then
      strTemp = Mid(strAddress, intX)                        'Take the part at the right
      intY = InStr(strTemp, ".")                              'Find the dot
      If (intY > 0) And (Right(strTemp, 1) <> ".") Then      'Not the last char
        fhpIsValidEmail = True                                'Could be a valid address
      End If '. after the @
    End If '. next to @
  End If 'found a @

End Function
Avatar billede itcon Nybegynder
11. oktober 2002 - 09:00 #4
Jeg sender udenom outlook, men det ser interessant ud.Jeg skal til en kunde nu, men kigger på det senere.
Avatar billede hossein Nybegynder
11. oktober 2002 - 20:59 #5
Her er en funktion hvor du skal lægge den i en module:

Function IsEmail(sCheckEmail)
    Dim sEmail As String
    Dim nAtLoc As String
    IsEmail = True
    sEmail = Trim(sCheckEmail)
    nAtLoc = InStr(1, sEmail, "@") 'Location of "@"

    If Not (nAtLoc > 1 And (InStrRev(sEmail, ".") > nAtLoc + 1)) Then
        '"@" must exist, and last "." in string must follow the "@"
        IsEmail = False
    ElseIf InStr(nAtLoc + 1, sEmail, "@") > nAtLoc Then
        'String can't have more than one "@"
        IsEmail = False
    ElseIf Mid(sEmail, nAtLoc + 1, 1) = "." Then
        'String can't have "." immediately following "@"
        IsEmail = False
    ElseIf InStr(1, Right(sEmail, 2), ".") > 0 Then
        'String must have at least a two-character top-level domain.
        IsEmail = False
    End If

End Function

Så kan du brug funktionen i en forspørgsel noget i den retning:
select mintabel.feltnavn, mintabel.feltnavn2, IsEmail(mintabel.feltnavn) as validEmail from mintabel

eller tjek tekstboksens input på formularen:

Private Sub sCheckEmail_BeforeUpdate(Cancel As Integer)

Dim Status As String
    Status = IsEmail(sCheckEmail)
    If Status <> "CPR-nr. er korrekt" Then
      MsgBox "Email Adresse: " & sCheckEmail & ": " & Status
      Cancel = True
    Else
      Cancel = False
    End If
End Sub


vh Hossein
Avatar billede hossein Nybegynder
11. oktober 2002 - 21:01 #6
skal den: If Status <> "CPR-nr. er korrekt" Then

rettes til:

If Status <> "Email adresse er korrekt" Then
Avatar billede itcon Nybegynder
13. oktober 2002 - 11:01 #7
Det er begge fine løsninger, som stort set gør det jeg allerede gør (bare i et par query's), men hvordan checkes der for om de anvendte karakterer ikke er ugyldige ??
Avatar billede hossein Nybegynder
13. oktober 2002 - 16:24 #8
hvis du bruger denne funktionen for en tekstboks i formularen:
Private Sub sCheckEmail_BeforeUpdate(Cancel As Integer)

Dim Status As String
    Status = IsEmail(sCheckEmail)
    If Status <> "Email adresse er korrekt" Then
      MsgBox "Email Adresse: " & sCheckEmail & ": " & Status
      Cancel = True
    Else
      Cancel = False
    End If
End Sub

hvis den indtastede email adresse er ugyldigt, poper up en message boks hvor står : "Email Adresse hjhjhjhjMin.com : false
Det gør den sætning:
"Email Adresse: " & sCheckEmail & ": " & Status
sCheckmail er teksboksens navn.

som funktion i query, kolonen som du navn giver fx IsEmail(mintabel.feltnavn) as validEmail, hvis værdien er false så får den værdien 0, etc.
Avatar billede itcon Nybegynder
30. oktober 2002 - 16:00 #9
Undskyld den lange svartid, men jeg har ikke været i stand til at logge ind på systemet. Begge løsninger er anvendelige, men de checker ikke for den komplette liste af gyldige tegn (ex skal danske bogstaver udelukkes, specialtegn mv) - kan man opstille en form for "gyldighedsarray" som der checkes op mod ?
Avatar billede itcon Nybegynder
10. februar 2003 - 13:27 #10
Jeg har ikke kunnet logge på systemet pga en ny firewall - Ingen af svarene dækker desværre alle tilfælde - nogen andre ideer ?
Avatar billede terry Ekspert
10. november 2003 - 20:36 #11
Avatar billede itcon Nybegynder
11. november 2003 - 08:38 #12
As allways - Terry to the rescue :) Much better than my current validate function.

Thanks
Avatar billede terry Ekspert
11. november 2003 - 18:12 #13
thanks itcon :o)
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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