Picture/validação para Email/WhatsApp

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Picture/validação para Email/WhatsApp

Mensagem por Itamar M. Lins Jr. »

Olá!
Alguém tem e pode disponibilizar a validação do email ?

Código: Selecionar todos

@ 030,250 get oEmail var cEMAIL Size 400,25 Style ES_LOWERCASE
@ 030,320 get oWhatsApp var cWhatsApp Picture "@R (99) 99999-9999" Size 180,25 
Em VBA:
Imagem

Código: Selecionar todos

Function IsEmailValid(strEmail)
    Dim strArray As Variant
    Dim strItem As Variant
    Dim i As Long, c As String, blnIsItValid As Boolean
    blnIsItValid = True
     
    i = Len(strEmail) - Len(Application.Substitute(strEmail, "@", ""))
    If i  1 Then IsEmailValid = False: Exit Function
    ReDim strArray(1 To 2)
    strArray(1) = Left(strEmail, InStr(1, strEmail, "@", 1) - 1)
    strArray(2) = Application.Substitute(Right(strEmail, Len(strEmail) - Len(strArray(1))), "@", "")
    For Each strItem In strArray
        If Len(strItem) <= 0 Then
            blnIsItValid = False
            IsEmailValid = blnIsItValid
            Exit Function
        End If
        For i = 1 To Len(strItem)
            c = LCase(Mid(strItem, i, 1))
            If InStr("abcdefghijklmnopqrstuvwxyz_-.", c) <= 0 And Not IsNumeric(c) Then
                blnIsItValid = False
                IsEmailValid = blnIsItValid
                Exit Function
            End If
        Next i
        If Left(strItem, 1) = "." Or Right(strItem, 1) = "." Then
            blnIsItValid = False
            IsEmailValid = blnIsItValid
            Exit Function
        End If
    Next strItem
    If InStr(strArray(2), ".") <= 0 Then
        blnIsItValid = False
        IsEmailValid = blnIsItValid
        Exit Function
    End If
    i = Len(strArray(2)) - InStrRev(strArray(2), ".")
    If i  2 And i  3 Then
        blnIsItValid = False
        IsEmailValid = blnIsItValid
        Exit Function
    End If
    If InStr(strEmail, "..") > 0 Then
        blnIsItValid = False
        IsEmailValid = blnIsItValid
        Exit Function
    End If
    IsEmailValid = blnIsItValid
End Function
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Picture/validação para Email/WhatsApp

Mensagem por JoséQuintas »

Tô estranhando um da lista que está mostrando como falso.
A princípio, uma validação simples pra essa lista:

Código: Selecionar todos

FUNCTION Valida( cEmail )

LOCAL lValid := .F.

cEmail := Trim( cEmail )
DO CASE
CASE ! "@" $ cEmail
CASE ! "." $ cEmail
CASE " " $ cEmail
CASE ".." $ cEmail
OTHERWISE
   lValid := .T.
ENDCASE
RETURN lValid
No VB, InStr() equivale a At(), é testar se tem o texto/letra em outra string, e Mid() equivale a Substr()
Aí no VBA tá testando se começa com "." ou termina com ".", se tem caracteres fora da lista de caracteres válidos, se tem "..", talvez testar se tem mais de um "@".
Pelo menos pra essa lista, já vai dar um retorno bom.

só não entendi porque tes@gmail.com mostra como verdadeiro e falso ao mesmo tempo, exceto o que tem espaço.
Ou talvez porque está repetido, e é inválido por isso, apenas a mensagem de falso é que não ficou boa.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Picture/validação para Email/WhatsApp

Mensagem por Itamar M. Lins Jr. »

Olá!
Não pode "#$%" entre outros, mais fácil validar somente o que é permitido.

Código: Selecionar todos

If InStr("abcdefghijklmnopqrstuvwxyz_-.", c) <= 0 And Not IsNumeric(c) Then
E os pontos só pode 1 ou 2. E outros detalhes que não lembro agora.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Picture/validação para Email/WhatsApp

Mensagem por Itamar M. Lins Jr. »

Olá!
O Harbour aceita "Expressões regulares"!. Não sei como usar.
JavaScript.

Código: Selecionar todos

function IsEmail(email){
    var exclude=/[^@-.w]|^[_@.-]|[._-]{2}|[@.]{2}|(@)[^@]*1/;
    var check=/@[w-]+./;
    var checkend=/.[a-zA-Z]{2,3}$/;
    if(((email.search(exclude) != -1)||(email.search(check)) == -1)||(email.search(checkend) == -1)){return false;}
    else {return true;}
}
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Picture/validação para Email/WhatsApp

Mensagem por sygecom »

Uso atualmente assim:

Código: Selecionar todos

*****************************************
STATIC FUNCTION EMAIL_VALIDO2(cMAIL_TEMP)
*****************************************
Local oRegEx, bVal
TRY
   oRegEx := Createobject("VBScript.RegExp")
CATCH
   RETURN .T.
END
oRegEx:Pattern :="^[\w-\.]{1,}\@([\da-zA-Z-_]{1,}\.){1,}[\da-zA-Z-_]{2,4}$"
cMAIL_TEMP := ALLTRIM(cMAIL_TEMP)
bVal := oRegEx:Test(cMAIL_TEMP)
Release oRegEx

Return bVal
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Picture/validação para Email/WhatsApp

Mensagem por Itamar M. Lins Jr. »

Olá!
Achei aqui no forum mesmo.

Código: Selecionar todos

// The example uses a regular expression to detect if a character
// string is a valid eMail address.

   PROCEDURE Main

      Local cRegEx := "\b[!#\$%&'\*\+\-/=\?\^_`{\|}~a-zA-Z0-9][!#\$%&'\*\+\-/=\?\^_`{\|}~a-zA-Z0-9\.]*[!#\$%&'\*\+\-/=\?\^_`{\|}~a-zA-Z0-9]@[a-zA-Z0-9\-][a-zA-Z0-9\-\.]+[a-zA-Z0-9\-]\b"
      LOCAL cEMail, GetList := {}

      SetMode( 24,80)

      CLS

      cEmail := Space( 250 )

      WHILE LastKey() != 27

         @ 10, 10 Say "Endereco de e-mail:" Get cEmail PICT "@S30"
         READ

         IF HB_REGEXLIKE( cRegEx, Rtrim( cEMail ) ) //IF RTrim( cEMail ) LIKE cRegEx
            DispOutAt( 12,10, PadR( RTrim( cEMail ) + " ==> valido", 79 ) )
         ELSE
            DispOutAt( 12,10, PadR( RTrim( cEMail ) + " ==> invalido", 79 ) )
         ENDIF
      ENDDO
   RETURN
Mas ainda não está completo.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Picture/validação para Email/WhatsApp

Mensagem por Itamar M. Lins Jr. »

Olá!
Mais outro aqui:

Código: Selecionar todos


FUNCTION Main()

LOCAL cVar   := "prueba@correo.com"
LOCAL cRegex := "^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$" //"/[A-Z0-9._%+-]+@[A-Z0-9-]+.+.[A-Z]{2,4}/"
LOCAL pRegex := hb_RegExComp( cRegex,.T.,.T. )

?lIsReges:=hb_IsRegex(pRegex)
aArr:=hb_RegEx(pRegex,cVar,.T.,.T.)
?lLike:=hb_RegExLike( pRegEx, cVar,.T.,.T. )
?lHas:=hb_RegExHas( pRegEx, cVar,.T.,.T. )

RETURN NIL
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder