[ bjeka @ 23.07.2006. 23:24 ] @
Kako pomocu c# da iz stringa (koji sadrzi neki tekst u kojem se nalazi izmedju ostalog i eMail adresa ) "izvadim" eMail adresu i smestim je u neku promenljivu.?
npr.
string sPocetni="bla, bla, bla... [email protected] bla bla bla..."; //pocetni string
string sIzvadjenaAdresa="[email protected]"; //zeljeni rezultat
[ NrmMyth @ 24.07.2006. 01:46 ] @
Nadji '@' i primjeti da je tvoj email od prvog lijevog razmaka do prvog desnog razmaka od znaka '@'
[ VerbatimBOT @ 24.07.2006. 02:11 ] @
Naravno, pravilo je da levo od @ znaka mogu biti bilo koji karakter, a desno mora da ima bar jednu tačku i da posle te tačke ima nešto (.com, .org itd)
[ DjoleReject @ 24.07.2006. 02:34 ] @
MA briga ga za tacku. dodje do @ pa se vrati do prvog belog, pa racuna da je adresa od tog slova do sledeceg prvog belog...
[ Oliver Klaćik @ 24.07.2006. 08:45 ] @
Najlakše je da koristiš Regular Expressions...

Code:

            // Define a regular expression for repeated words.
            Regex rx = new Regex(@"\w+@\w+.\w+",
              RegexOptions.Compiled | RegexOptions.IgnoreCase);

            // Define a test string.        
            string text = TvojUlazniString;

            // Find matches.
            MatchCollection matches = rx.Matches(text);

            // Report on each match.
            foreach (Match match in matches)
            {
                string emailAdresa = match.Value;
            }
[ bjeka @ 25.07.2006. 01:59 ] @
Uspeo sam radi mi onako kako je rekao Oliver Klacik, hvala vam puno.
Samo treba da se koristi "using System.Text.RegularExpressions;"
radi i za stringove gde nije ispred i iza adrese razmak, npr. <a href="mailto:[email protected]">anfragen</a>
[ NrmMyth @ 25.07.2006. 06:54 ] @
Je, ali je znak koji se ne moze naci u samoj email adresi, pa se ne mijenja nimalo algoritam.
[ misk0 @ 25.07.2006. 10:17 ] @
Buduci da u e-mail adresi, tj u korisnickom imenu moze da bude tacka (.) modifikovao bih
Code:

 Regex rx = new Regex(@"\w+@\w+.\w+", RegexOptions.Compiled | RegexOptions.IgnoreCase);


u

Code:

 Regex rx = new Regex(@"[A-Za-z0-9_.]+@\w+.\w+", RegexOptions.Compiled | RegexOptions.IgnoreCase);



Mada nije ni ovo konacno rjesenje jer neko ima adresu recimo [email protected] tj postoje 2 tacke u imenenu domena.
Ja sam nov sa regexp-ima pa mi treba vishe treninga i vjezbe da skontam, kad skontam napisacu :)
[ misk0 @ 25.07.2006. 10:38 ] @
Mislim da je ovo dobitna kombinacija

Code:
"[A-z0-9_.-]+@[A-z0-9_.-]+[A-z]{2,4}"


[ mmix @ 25.07.2006. 12:24 ] @
Citat:
misk0: Mislim da je ovo dobitna kombinacija
Code:
"[A-z0-9_.-]+@[A-z0-9_.-]+[A-z]{2,4}"

Nope, pronaci ce npr adresu [email protected] sto nije validna email adresa, dalje postoje root domeni sa vise od 4 karaktera (.museum, npr). Dalje, \w moze da ti menja [A-Za-z0-9_] a i account adrese moze da sadrzi %

Ovo je malo ispravnije resenje:

Code:

[\w.%-]+@([\w-]+\.)+[\w]{2,6}


Naravno, ni ovo resenje nije potpuno, u attachmentu imas regular expression koji je 100% kompatibilan sa RFC standardom za email adresu, ali naravno niko normalan to ne bi koristio (a i verovatno bi bilo uzasno sporo, nisam probao ). Ko sto rece moj nekadasnji profa, regex je uvek kompromis izmedju egzaktnosti i prakticnosti

[ misk0 @ 25.07.2006. 12:49 ] @
Da, ja sam skratio izraz misleci da cu ga napraviti jednostavniji a zaboravio sam taj dio sa ..
Ovaj RFC compatibile je ql, ali nema sanse da skontam sta pishe tamo.
[ Paimonia @ 29.07.2006. 19:14 ] @
Auh... dokle je ovo stiglo? Mislim da ni najsloženije ne bi trebalo da bude sporo...
[ CtrlAltDel @ 29.07.2006. 19:28 ] @
^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,3}$
[ sale83 @ 30.07.2006. 01:59 ] @
@mmix

Ovo sto si napisao:

Code:

[\w.%-]+@([\w-]+\.)+[\w]{2,6}


Nije dobro resenje kako sto si i sam rekao...

Po tome [email protected] je EMAIL :)


@CtrlAltDel

Sve mi se cini da je tvoj RegExp malo neispravan :)



Recimo evo sta meni pada napamet:

Code:

' neka Funkcija koja ce da vrati emial adresu
' mada ni ovo nije neko 100 % resenje ali moze lako da se izvede....

    Public Function VratiEmail(ByVal str As String) As String
        str = Regex.Replace(str, "[^\w\.@-_]", " ")
        Dim EmailArray() As String = Split(str)
        Dim LastNonEmpty As Integer = -1
        For i As Integer = 0 To EmailArray.Length - 1
            If EmailArray(i) <> "" And (InStr(EmailArray(i), "@") And InStr(EmailArray(i), ".")) Then
                LastNonEmpty += 1
                EmailArray(LastNonEmpty) = EmailArray(i)
            End If
        Next
        Return EmailArray(LastNonEmpty)
    End Function




Znaci imamo ovako nesto:

Code:


        Dim str As String = "dddd ddddd dddd [email protected] >[email protected]/> sasasas sas@dfs fdf"

        'Treba da vrati [email protected]
        MsgBox(VratiEmail(str))

'Jedini problem je ako se nadje jos jedan email ili kombinacija stringa gde ima @ i .




Mada funkcija moze da se napravi da vrati sve tako reci email adrese a kasnije se proveri ispravnost te email adrese :)


Poz
sale
[ CtrlAltDel @ 30.07.2006. 12:57 ] @
hm, ja ovo koristim u php funkciji za proveru unosa mail-a...

u stvari jes malo neispravan , propusta jednu gresku...
[ misk0 @ 30.07.2006. 14:21 ] @
Citat:
CtrlAltDel: hm, ja ovo koristim u php funkciji za proveru unosa mail-a...
u stvari jes malo neispravan , propusta jednu gresku...


Pitanje je bilo kako izvuci ispravan e-mail iz texta, a ne 'da li je upisan string e-mail'. Tvoj Regexp ima ^ i $ sto su pocetak i kraj stringa, znaci ne mozes mu servirati citav text a da on odatle izvuce string.
[ misk0 @ 30.07.2006. 14:34 ] @
Citat:
sale83: @mmix

Ovo sto si napisao:

Code:

[\w.%-]+@([\w-]+\.)+[\w]{2,6}


Nije dobro resenje kako sto si i sam rekao...

Po tome [email protected] je EMAIL :)


Iako nisam koristio VB iskompajlirao sam tvoj kod i njemu prolazi isti e-mail. Znaci da bi imao sigurno ispravan email, morao bi osim toga da ga izolujes kao string, da provjeris da li domen postoji i da provjeris da li username postoji. To iskljucuje regexp-e iz dalje priche.
Mislim da je ovde bilo bitnije izvuci ispravnu e-mail sintaksu sto prethodni regexp radi.

[att_img]