Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

magda

procurar e-mail dentro de uma richtextbox

Mensagens Recomendadas

magda

Boas,

este é o meu primeiro tópico, e estou mesmo a precisar da vossa ajuda.

Sou iniciante na programação em vb.net, e estou a fazer um pequeno programa onde tenho um texto dentro de uma richtextbox e quero pesquisar se essa richtextbox tem alguma e-mail nesse texto. já fui a montes de sites e não consigo encontrar nada que me ajude :s por isso agradecia que alguém me ajudasse.

Eu tentei fazer o seguinte código mas esta a dar erro:

If eMail = "" Then
            NumCrescente = 1
            For num = 1 To Len(RichTextBox1.Text)
                STR = Mid(RichTextBox1.Text, NumCrescente, 1)
                If STR = "@" Then
                    Dim NumDecrescente As Long
                    For NumDecrescente = NumCrescente To 0 Step -1
                        STR = Mid(RichTextBox1.Text, NumDecrescente, 1)
                        If STR = "" Then
                            Dim ponto As Long
                            For ponto = NumDecrescente To Len(RichTextBox1.Text) Step 1
                                STR = Mid(RichTextBox1.Text, ponto, 1)
                                If STR = "." Then
                                    For EspacoDireita = ponto To Len(RichTextBox1.Text)
                                        STR = Mid(RichTextBox1.Text, EspacoDireita, 1)
                                        If STR = "" Or EspacoDireita = Len(RichTextBox1.Text) Then
                                            eMail = Mid(RichTextBox1.Text, NumDecrescente, (EspacoDireita - NumDecrescente))
                                            NumCrescente = EspacoDireita
                                            Exit Sub
                                        End If
                                    Next EspacoDireita
                                End If
                            Next ponto
                        End If
                    Next NumDecrescente
                End If
                NumCrescente = NumCrescente + 1
            Next num
        End If
        eMail = RichTextBox2.Text

Obrigada, Magda Pereira


Magda Pereira

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tuntankamon

Isso é um bom trabalho para utilizares Regular Expressions...

O email deve ter algum formato especifico, tipo .pt, ou é livre?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Olá Magda, bem-vinda.

Os emails estão delimitados por espaços?

Ou queres procurar por emails, digamos em linguagem de marcação (onde é raro estarem delimitados por espaço)?


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
magda

Olá,

Os e-mails não estão necessariamente delimitados por espaços, pois eu quero procurar os e-mails no meio de HTML.

Eu quero procurar qualquer tipo de e-mail, sem nenhum formato especifico.

Obrigada.


Magda Pereira

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
spipo

Olá Magda,

No Html que capturas, faz referencia por exemplo a isto?:

<a href="mailto:.....@....">.....@....</a>

Se a resposta é "SIM", e se em todos os Html que capturas por exemplo qualquer email referenciado no Html tenha, por exemplo:

<a href="mailto:pepe@pepe.com">pepe@pepe.com</a>

Pois entao, podes fazer o seguinte:

        Dim Html As String = pageHtml
        Dim Emails As New ArrayList

        While Html.Contains("mailto:")

            'posicionas até o começo do 'mailto:'
            Html = Html.Substring(Html.IndexOf("mailto:"))

            'parseamos o que nos interessa
            Dim strEmail As String = Html.Substring(0, Html.IndexOf(">"))

            'Fazemos um replace para eliminar o conteudo do email encontrado, dentro do conteudo Html
            Html = Replace(Html, strEmail, String.Empty)

            'fazemos uma vez mais um replace para ficar propriamente com o email
            strEmail = Replace(strEmail, "mailto:", String.Empty)

            'adicionamos o email no arraylist...
            Emails.Add(strEmail)

        End While

Por fin podes depois fazer uma funcao que devolve a arraylist y manejar como queiras.

Todo o código de prova:

        Dim client As New WebClient()
        Dim strHtml As String = String.Empty

        Try
            Dim pageData As [byte]() = client.DownloadData("http://www.sinis-tech.es/Contacto/tabid/55/Default.aspx")
            strHtml = System.Text.Encoding.ASCII.GetString(pageData)
        Catch x As WebException
            MsgBox(x.ToString)
        End Try

        If Not String.IsNullOrEmpty(strHtml) Then

            Dim Emails As New ArrayList

            While strHtml.Contains("mailto:")

                'posicionas até o começo do 'mailto:'
                strHtml = strHtml.Substring(strHtml.IndexOf("mailto:"))

                'parseamos o que nos interessa
                Dim strEmail As String = strHtml.Substring(0, strHtml.IndexOf(">"))

                'Fazemos um replace para eliminar o conteudo do email encontrado, dentro do conteudo Html
                strHtml = Replace(strHtml, strEmail, String.Empty)

                'fazemos uma vez mais um replace para ficar propriamente com o email
                strEmail = Replace(strEmail, "mailto:", String.Empty)

                'adicionamos o email no arraylist...
                Emails.Add(strEmail)

            End While

        End If


Saludos,Carlos Menezes

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
magda

Olá Carlos,

obrigado pelo codigo, mas eu queria retirar do HTML todos os e-mail, e não só os que estivessem assim:

<a href="mailto:.....@....">.....@....</a>.

Eu estive a pesquisar sobre a dica do r00tfixxxer, sobre as regular expressions e acho que é  a melhor soluçao para resolver o meu problema, além de estar com algumas dificuldades. Já sei qual a regular expression a utilizar :

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b

só nao sei como aplica-la no codigo    :S

Cumps,

Magda


Magda Pereira

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tuntankamon

Hehehe

Como já fizeste algum trabalho de casa, já te posso ajudar.

Deves importar o namespace System.Text.RegularExpressions.

 Dim strMail As String = "[a-z\.]*@[a-z]*\.[a-z]{2,4}"
        Dim reg As New System.Text.RegularExpressions.Regex(strMail)
        Dim matches As System.Text.RegularExpressions.MatchCollection
        matches = reg.Matches("textoapesqueisar")
        If matches.Count > 0 Then
            For Each m As System.Text.RegularExpressions.Match In matches
                MsgBox(m.Value)
            Next
        End If

A expressão regular pode e deve ser afinada...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
magda

Obrigada r00tfixxxer pela ajuda.

O código está a funcionar a maneira, estou agora a "afina-lo" para funcionar da melhor maneira para aquilo que quero.

Quando acabar o código coloco-o aqui pois pode ser que ajude alguem que queria fazer algo parecido.


Magda Pereira

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Um pequeno reparo:

Usa antes:

[a-z0-9-\.]*@[a-z]*\.[a-z]{2,4}

Com a expressão anterior não apanhavas emails como:

zeca123@qqcoisa.com ou zeca-martelo@qqcoisa.com


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tuntankamon

Eu disse que a expressão precisava de afinação... :)

Tal como essa situação, existem muitas outras, tais como, os emails não poderem começar por números e terminar com números, etc...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
magda

Bem, Muito obrigado a todos pela ajuda. como prometi aqui fica o código, alem de nao saber se ainda vou alterar mais alguma coisa, acho que assim o codigo ja esta bastante completo.

Dim strMail As String = "[a-z0-9-\.]*@[a-z]*\.[a-z]{2,4}"
        Dim reg As New System.Text.RegularExpressions.Regex(strMail)
        Dim matches As System.Text.RegularExpressions.MatchCollection
        matches = reg.Matches(RichTextBox1.Text)
        If matches.Count > 0 Then
            For Each m As System.Text.RegularExpressions.Match In matches
                If ListBox1.Items.Contains(m.Value) Then
                    MsgBox("email ja colocado")
                Else
                    RichTextBox2.Text = RichTextBox2.Text & m.Value & ";"
                    ListBox1.Items.Add(m.Value)
                End If
            Next
        End If

Acho que pode-se dar este tópico como resolvido.


Magda Pereira

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.