[VB6] Controllo campi in una stringa

di il
2 risposte

[VB6] Controllo campi in una stringa

Salve a tutti

vorrei effettuare un controllo di un campo contenente un' e.mail che mi veifichi la presnza del . e della @.

Ho scritto il seguente codice:

If InStr(IndirizzoEmail, "@") And InStr(IndirizzoEmail, ".") Then
    msgbox  "Formato email Ok"
Else
    MsgBox "Formato e-mail non valido", vbOKOnly + vbCritical, "ERRORE"
End If
Ho provato anche così

If InStr(IndirizzoEmail, "." And InStr(IndirizzoEmail, "@") And InStr(IndirizzoEmail, ".") Then
    msgbox  "Formato email Ok"
Else
    MsgBox "Formato e-mail non valido", vbOKOnly + vbCritical, "ERRORE"
End If
Ma se l'indirizzo e-mail contiene due punti il codice non funziona. Ad esempio se inserisco mi viene restituito errore.
Esiste un sistema per risolvere questo problema.

Grazie.

2 Risposte

  • Re: [VB6] Controllo campi in una stringa

    Premesso che ci sono le REGOULAR EXPRESSION che fanno già questo sporco lavoro...
    Ti basta inserire nei Riferimenti(EarlyBinding) le LIB di REGEX:
    Microsofr VbScript Regular Expression x-y
    oppure in modalità LATEBINDING ed usare questo codice
    
    Public Function ValidateEmailAddress(ByVal strEmailAddress As String) As Boolean
        On Error GoTo Catch
        
        Dim blnIsValidEmail As Boolean
        ' TECNICA EARLYBINDING
        ' Richiede RIFERIMENTI ESPLICITI
        Dim objRegExp As New RegExp
    
        ' TECNICA LATE BINDING
        ' Dim objRegExp As Object
        ' Set objRegExp = CreateObject("VBScript.RegExp")  
    
        objRegExp.IgnoreCase = True
        objRegExp.Global = True
        objRegExp.Pattern = "^([a-zA-Z0-9_\-\.]+)@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"
        
        blnIsValidEmail = objRegExp.Test(strEmailAddress)
        ValidateEmailAddress = blnIsValidEmail
          
        Exit Function
        
    Catch:
        ValidateEmailAddress = False
        MsgBox "ValidateEmailAddress function" & vbCrLf & vbCrLf _
    		& "Error#:  " & Err.Number & vbCrLf & vbCrLf & Err.Description
    End Function
    
    Se invece vuoi fare con VB/A/6 o altro queste sono le mie considerazioni:
    Del primo punto direi che puoi non farti carico, non è obbligatorio e la Funzione [INSTR(...)]
    espone un parametro [Start] che definisce da che CharNum iniziare la verifica...
    Ti basta pertanto cercare il DOT dopo la @....
    
       
        Dim lngCH As Long
        Dim lngDOT As Long
        lngCH = InStr(StringEMAIL, "@")
        If lngCH = 0 Then
            MsgBox "Formato e-mail non valido", vbOKOnly + vbCritical, "ERRORE"
        Else
            lngDOT = InStr(lngCH, StringEMAIL, ".")
            If lngDOT = 0 Then
                MsgBox "Formato e-mail non valido", vbOKOnly + vbCritical, "ERRORE"
            Else
                MsgBox "Formato email Ok"
            End If
        End If
    
  • Re: [VB6] Controllo campi in una stringa

    Grazie per gli esempi.
    Per il momento ho usato INSTR nel seguente modo, anche se non molto elegante:
    
        Do Until InStr(MittenteEmail, "@")
            MsgBox "e-mail non valida, manca il carattere @", vbOKOnly + vbCritical, "ERRORE"
            MittenteEmail.SetFocus
            Exit Sub
        Loop
    
        Posizione = InStr(MittenteEmail, "@")
    
        Do Until InStr(Posizione, MittenteEmail, ".")
            MsgBox "e-mail non valida, manca il . dopo la @", vbOKOnly + vbCritical, "ERRORE"
            MittenteEmail.SetFocus
            Exit Sub
        Loop
    
    Ho provato anche la REGULAR EXPRESSION ma mi restituisce la posizione del precedente al carattere ricercato.
    Ho utilizzati il seguente esempio:
    
    Private Sub CmdConfronta_Click()
        MsgBox (TestRegExp(TxtRicerca, TxtTesto))
        'Oppure inserire i parametri direttamente nella msgbox
        'MsgBox (TestRegExp("is.", "IS1 is2 IS3 is4"))
    End Sub
    
    Function TestRegExp(myPattern As String, myString As String)
       Dim objRegExp As RegExp
       Dim objMatch As Match
       Dim colMatches As MatchCollection
       Dim RetStr As String
       
       Set objRegExp = New RegExp
       objRegExp.Pattern = myPattern
       objRegExp.IgnoreCase = True
       objRegExp.Global = True
    
       If (objRegExp.Test(myString) = True) Then
    
        Set colMatches = objRegExp.Execute(myString)  
    
        For Each objMatch In colMatches
          RetStr = RetStr & "Corrispondenza trovata alla posizione "
          RetStr = RetStr & objMatch.FirstIndex & ". Il valore corrispondenza è "
          RetStr = RetStr & objMatch.Value & "'." & vbCrLf
        Next
       Else
        RetStr = "Corrispondenza " & TxtRicerca & " non trovata"
       End If
       TestRegExp = RetStr
    End Function
    
    Grazie di nuovo e, anche se forse non è la sede adatta scusate per il crossposting.

    Ciao
Devi accedere o registrarti per scrivere nel forum
2 risposte