Autor Zpráva
petersk
Profil *
Ako môžem v texte (napr. textarea) nájsť a vypísať všetky emaily?
Darker
Profil
Samosebou, tak z části fungují spamboti. Ale mělo by to být v sekci JS, pokud chceš prohledávat textareu, a ne parsovat webové stránky a tahat z nich maily obětí spamu...
Pak jde jen o to, rozdělit text po mezerách, následně vzniklé pole projet cyklem, a pokud prvek obsahuje zavináč a tečku (v tomto pořadí) přidat jej do jiného pole. Než ti sem někdo hodí skript skus se zamyslet, nicméně podmínka se zavináčem vypadá takto:
if(pole[i].indexOf("@")!=-1&&pole[i].indexOf("@")<pole[i].indexOf(".")){/*pridej*/}
SwimX
Profil
darker, petersk:
mnohem jednoduší řešení zní: regulární výrazy
Darker
Profil
Ty v JS nejsou, a v PHP nejsou žádné html objekty včetně prvku textarea, takže jsem se zařídil podle situace.
SwimX
Profil
darker:
Ty v JS nejsou
Regulární výrazy a JavaScript - úvod
uznávám že s JS moc nepracuju, ale určitě jsem je i tam využil

v php nějak takle (není to vybuec ideální regulár, povoluje třeba dvě tečky za sebou v mailu atd. ale pro ukázku stačí bohatě
$text = "Lorem ipsum dolor sit amet consectetuer Aliquam Phasellus tempor sagittis nibh. Natoque email@seznam.cz Lorem eget mauris Aenean et Curabitur vel lacinia pellentesque iaculis. At id hac Sed nisl metus sem pellentesque laoreet a velit. Pretium metus est risus Pellentesque laoreet Nam cursus Phasellus Pellentesque Nulla. At tristique at orci mujmejl@gmail.com quis malesuada tincidunt id Integer vitae auctor. Vitae consectetuer nibh In ut libero a Sed ut Nunc Morbi. Ullamcorper penatibus.";
$allow_chars = "[a-z1-9-_\.]";
preg_match_all("~$allow_chars+@$allow_chars+\.$allow_chars+~", $text, $matches);

print_r($matches);
AM_
Profil
SwimX:
nedá mi to se nezeptat, proč by se v e-mailové adrese nemohla vyskytnout nula?
Keeehi
Profil
SwimX:
V emailové adrese se může vyskytnout klidně i velké písmeno. :-)
SwimX
Profil
:-) no řikám, že to není dokonalý :-) na 0 sem zapomněl a v tom preg_matched_all měl být na konci i
petersk
Profil *
Nemám záujem vytvoriť spam robota, potrebujem v príspevkoch vyhľadať emailové adresy.
Majkl578
Profil
SwimX:

+foo&bar#bat@example.com je také platná adresa.

Jak správně validovat e-mail se můžeš podívat třeba v kódu Nette Frameworku.
SwimX
Profil
Majkl578:
Dík, ale mě to netrápí :-) já využívám .+@.+\..+

petersk:
tak pak si netrefil kategorii a patří to do JS.
<script>
function find_mails(){
    var text = document.getElementById('text').value;
    var mails = text.match(/[^ ]+@[^ ]+\.[^ ]+/gi);
    
    alert(  mails.join("\n") );
    
}
</script>
<textarea id='text'>Lorem ipsum dolor sit amet consectetuer Aliquam Phasellus tempor sagittis nibh. Natoque email@seznam.cz Lorem eget mauris Aenean et Curabitur vel lacinia pellentesque iaculis. At id hac Sed nisl metus sem pellentesque laoreet a velit. Pretium metus est risus Pellentesque laoreet Nam cursus Phasellus Pellentesque Nulla. At tristique at orci mujmejl@gmail.com quis malesuada tincidunt id Integer vitae auctor. Vitae consectetuer nibh In ut libero a Sed ut Nunc Morbi. Ullamcorper penatibus.</textarea>
<button onclick='find_mails()'>Hledej mejly</button>
s regulárem si pohrej podle návodu výše :)
AM_
Profil
O správnosti reguláru e-mailu se asi moc nemá cenu dohadovat, někde jsem četl, že to vlastně ani nikde pořádně standardizované není, především které znaky jsou povolené - proto mi tedy přijde nejsprávnější mít ten regulár co nejobecnější (něco jako
SwimX:
Dík, ale mě to netrápí :-) já využívám .+@.+\..+
).
Darker
Profil
SwimX:
Regulární výrazy a JavaScript - úvod
To jsem netušil, myslel jsem že je to specialita PHP. Omlouvám se za mistifikaci.
Chamurappi
Profil
Reaguji na darkera:
Regulární výrazy jsou v JS dokonce zadrátované přímo do syntaxe jazyka, což se u mnoha jazyků nevidí.
Darker
Profil
Ano, hned jsem si o tom něco vyhledal, a zalitoval jsem času, který jsem dřív ztratil složitými konstrukcemi pro kontrolu nějakého textu...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0