Adicionar validação de eMail nos campos | Ti Responde 0144

No vídeo de hoje, vamos demonstrar em como adicionar uma validação em um campo no sistema para verificar se o email informado é válido.

A dúvida de hoje, nos perguntaram, em como poderíamos usar a IsEmail direto na validação de campo de usuário porém com a possibilidade de validar mais de um eMail separado por ponto e vírgula.

 

Pensando nisso, montamos esse exemplo, onde vamos demonstrar a utilização da função customizada zVldMail juntamente com a lógica elaborada do ponto e vírgula.

 

Segue abaixo o vídeo exemplificando:

 

E abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zVldMail
Função que valida se o campo digitado possui emails válidos
@type  Function
@author Atilio
@since 12/04/2024
@obs Após compilar, coloque na validação de usuário (X3_VLDUSER) dos campos desejados como o A1_EMAIL: u_zVldMail()

Abaixo alguns exemplos que você pode testar:
"teste@teste.com"
"teste@teste.com;"
"teste@teste.com;teste2@tst.com"
"teste@teste.com;teste2@tst"
"teste@te ste.com"
";;;"
"aaa"
/*/

User Function zVldMail()
    Local aArea     := FWGetArea()
    Local lContinua := .T.
    Local cEmails   := Alltrim(&(ReadVar()))
    Local aEmails   := {}
    Local nAtual    := 0

    //Se tiver ponto e vírgula
    If ";" $ cEmails
        //Valida se o usuário só colocou ;, para assim impedir
        If Empty(StrTran(cEmails, ";", ""))
            lContinua := .F.
            ExibeHelp("Help zVldMail", "eMail inválido!", "Verifique se foi inserido corretamente o campo!")
        Else

            //Quebra a string em um array
            aEmails := StrTokArr(cEmails, ";")

            //Percorre todos os eMails enocntrados
            For nAtual := 1 To Len(aEmails)

                //Só vai continuar se o email for válido
                lContinua := lContinua .And. IsEmail(aEmails[nAtual])

                //Se houve alguma falha, já encerra o laço
                If ! lContinua
                    Exit
                EndIf

            Next
        EndIf


    //Senão, valida só o que foi inserido no campo
    Else
        lContinua := IsEmail(cEmails)
    EndIf

    FWRestArea(aArea)
Return lContinua

Bom pessoal, por hoje é só.

 

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação