valoidatieregel e-mailadres

Status
Niet open voor verdere reacties.

arnoderuig

Gebruiker
Lid geworden
8 sep 2000
Berichten
577
In mijn Access 2010 database gebruik ik al jaren een validatieregel om te bepalen of een e-mailadres wel juist kan zijn. Ik heb daarmee geprobeerd alle vreemde tekens die niet mogen in een e-mailadres te kunnen uitsluiten. Ook wordt voorkomen dat in één veld meerdere e-mailadressen worden vermeld. Dit loopt al die tijd helemaal goed.

Sinds kort wordt echter gemeld dat het ingegeven e-mailadres niet juist is. Het is een e-mailadres bestaande uit 3 letters, daarna natuurlijk de (at) en daarna weer 3 posities en .nl

Het enig opvallende dat ik zie in het adres is dat de bedrijfsnaam (de 3 posities voor .nl) een cijfer bevat. Voorzover ik echter weet heb ik dat niet uitgesloten in mijn validatieregel. Of toch? (Vervelend vind ik even dat ik uit privacy-overwegingen het e-mailadres natuurlijk hier niet openbaar maak).

Onderstaand vermeld ik de validatieregel die ik gebruik:

Like "*@*"
And Like "*.*"
And Not Like "* en *"
And Not Like "* of *"
And Not Like "*/*"
And Not Like "*\*"
And Not Like "*{*"
And Not Like "*}*"
And Not Like "*[*"
And Not Like "*]*"
And Not Like "*!*"
And Not Like "*&*"
And Not Like "*%*"
And Not Like "*$*"
And Not Like "*(*"
And Not Like "*)*"
And Not Like "*#*"
And Not Like "*<*"
And Not Like "*>*"
And Not Like "*,*"
And Not Like "*[?]*"
And Not Like "*[#]*"
And Not Like "*[:]*"
And Not Like "*[*]*"
And Not Like "* *"

Heeft iemand een idee waar het nu fout gaat?
 
Je checkt anders wel degelijk of er een nummer in het email adres zit, en die wordt er dan netjes uit gefilterd. Dat gebeurt hier: And Not Like "*#*" en hier: And Not Like "*[#]*". Als je die weghaalt, doet-ie het wel. Overigens gebuik ik zelf een RegExp functie (Zoek op Regular Expressions). Hier staan mooie voorbeelden van email checks.
 
OctaFish,

Je hebt gelijk; helemaal over het hoofd gezien.

Overigens, de

And Not Like "*[#]*"

is volgens mij WEL goed. Hiermee test ik (als ik het goed heb begrepen uit andere fora) of het teken # in het e-mailadres staat. Deel jij deze mening?

Groet,
Arno de Ruig.
 
Je controleert er dubbel op; And Not Like "*#*" en And Not Like "*[#]*" is volgens mij in essentie hetzelfde.

Ik heb ondertussen de Regular Expression die ik gebruik er even bij gehaald. Die functie ziet er zo uit:

Code:
Public Function ValidateEmail(ByVal EmailAddress As Variant) As Boolean
' Validate email address
Dim EmailPattern  As String
'------------------------------------------------------------------------------------
' Early Binding
' Heeft een Verwijzing nodig naar:  <Microsoft VBScript Regular Expressions 5.5>
' Dim objRegExp As RegExp
'------------------------------------------------------------------------------------

'------------------------------------------------------------------------------------
'Late Binding
Dim objRegExp As Object
'------------------------------------------------------------------------------------
Dim blnIsValid As Boolean
On Error GoTo Catch

''    EmailPattern = "\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
''    EmailPattern = "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b"
    EmailPattern = "^([a-zA-Z0-9_\-\.]+)@[a-z0-9-\.]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$"

    '--------------------------------------------------------------------------------
    'Early Binding
    ''Set objRegExp = New RegExp
    '--------------------------------------------------------------------------------
    
    '--------------------------------------------------------------------------------
    'Late Binding
    Set objRegExp = CreateObject("VBScript.RegExp")
    '--------------------------------------------------------------------------------

    objRegExp.IgnoreCase = True
    objRegExp.Global = True
    objRegExp.Pattern = EmailPattern
    
    blnIsValid = objRegExp.test(EmailAddress)
    ValidateEmail = blnIsValid
    Exit Function

Catch:
    ValidateEmail = False

End Function
Je kunt hem zowel met Late binding als met Early binding gebruiken; de Late binding staat actief, zodat je hem direct kunt uitproberen. Ook staan er nog een paar extra controlestrings in, als je een andere variant wilt proberen. Er zijn er tientallen te vinden op het internet, als je een beetje zoekt :)
In een query gebruik je hem dan zo:
Code:
Check: ValidateEmail([email])
Het resultaat is 0 (fout email) of -e (correct emailadres). En daar kun je dan weer simpel op filteren.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan