achar um caracter

Discussão em 'Progress 4GL' iniciado por Alexandre, Março 23, 2010.

  1. Alexandre

    Alexandre Membro Participativo

    bom dia amigos...
    tenho que fazer uma validação de email...para isso ternho que verificar como acho "@" no meio da minha variavel...

    como faço pra verificar se existe o "@"???

    abraço
  2. kirchner

    kirchner Membro Participativo Moderador

    Alexandre,

    Uma forma simples é usar as funções INDEX e R-INDEX.
    Ambas procuram uma string dentro de outra, mas a R-INDEX começa do final.
    Ambas retornam um INT informando em que posição encontraram a string, ou 0 se não foi encontrado.

    Como um e-mail só pode ter um @, você pode verificar se a posição começando do início e do fim é a mesma. Se não for, há mais de 1 @.
  3. kirchner

    kirchner Membro Participativo Moderador

    Na verdade, para validar e-mail o melhor era usar uma expressão regular.
    Alguém sabe como fazer isso em Progress?

    Em qualquer linguagem é bem simples, mas eu não conheço em Progress...
  4. Alexandre

    Alexandre Membro Participativo

    obrigado meu brother!!!!
  5. mepossamai

    mepossamai Sem Pontuação

    Olá..

    fiz uma include certa vez que valida o e-mail.. segue codigo:

    Código:
    /*Observacoes: {1} - Recebe o campo com o valor do e-mail
                  {2} - Retorna um valor logico se o e-mail e valido ou nao
                        yes (e-mail valida) | false (e-mail invalido)
                  {3} - seta variavel para mais de uma chamada no programa*/
    def var {3}icont      as int init 0.
    def var {3}contponto  as int init 0.
    def var {3}contarroba as int init 0.
    def var {3}vmail2     as char.
    def var {3}vchar      as char 
            init " ,/,:,;,(,),=,',`,^,~,á,à,é,è,í,ì,ó,Ò,ã,ñ,ç,+,&,#,$,%,?,!,*,\,|".
    
    assign {2} = true.
    
    /** VALIDA TAMANHO DO E-MAIL **/
    if length({1}) < 5 then
        assign {2} = false.
    
    /** VALIDA NUMERO DE @ **/
    {3}contarroba = 0.
    do {3}icont = 1 to length({1}):
        if (lookup(substring({1}, {3}icont, 1), "@") > 0) then
            {3}contarroba = {3}contarroba + 1.
    end.
    if {3}contarroba > 1 or
       {3}contarroba = 0 then
        assign {2} = false.
    else do:
        /** VALIDA SE PRIMEIRO OU ULTIMO EH . OU @ **/
        if substring({1}, 1, 1)                     = "@" or
           substring({1}, 1, 1)                     = "." or
           substring({1}, length({1}), 1)           = "@" or
           substring({1}, length({1}), 1)           = "." then
            assign {2} = false.
        /** VALIDA SE APOS OU ANTES DA @ EH . **/
        else if substring({1}, r-index({1}, "@") - 1, 1) = "." or
                substring({1}, r-index({1}, "@") + 1, 1) = "." then
            assign {2} = false.
    end.
    
    /** VALIDA CARACTERES ESPECIAIS E SEQUENCIA .. **/
    do {3}icont = 1 to length({1}):
        if lookup(substring({1}, {3}icont, 1), {3}vchar) > 0 then
            assign {2} = false.
        if lookup(substring({1}, {3}icont, 2), "..") > 0 then
            assign {2} = false.
    end.
    
    /** VALIDA SE PRIMEIRO OU ULTIMO EH . OU @ **/
    /*if substring({1}, 1, 1)           = "@" or
       substring({1}, 1, 1)           = "." or
       substring({1}, length({1}), 1) = "@" or
       substring({1}, length({1}), 1) = "." then
        assign {2} = false.*/
    
    /** VALIDA A QUANTIDADE DE . APOS @ **/
    {3}vmail2 = "".
    {3}contponto = 0.
    
    {3}vmail2 = substring({1}, index({1}, "@") + 1, length({1})).
    do {3}icont = 1 to length({3}vmail2):
        if lookup(substring({3}vmail2, {3}icont, 1), ".") > 0 then
            {3}contponto = {3}contponto + 1.
    end.
    if {3}contponto = 0 or
       {3}contponto > 3 then
        assign {2} = false.
    
    e a chamada foi feita assim:
    Código:
     def var mailval as   log initial true no-undo. 
    [todo o codigo..]
    do on error undo:
            update TABELA.CAMPO colon 25 format "x(40)".
            if TABELA.CAMPO <> "" then do:
                mailval = true.
                {INCLUDE.i TABELA.CAMPO mailval a}.
                if not mailval then do:
                    bell.
                    message "Endereco eletronico invalido, verifique!".
                    pause.
                    hide message no-pause.
                    undo.
                end.
            end.
        end.

Compartilhe esta Página