Nej det hade jag inte. Tyvärr begriper jag inte vilken del som plockar ut epostadressen... eller snarast fattar jag inte HUR den gör det? Ska se om det går upp en taljdank imorgon när jag är piggare.
Duffer skrev:
Förstår dock inte hur du kom fram med det resultat du fått hittils, bara det är som ren latin för mig att försöka förstå. =(
Tja, eftersom det inte funkar... så missar du inget!
function checkemail($mail) {
if (!isset($mail) or empty($mail))
return false;
$mail = trim($mail);
if (eregi('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$',$mail)){
return true;
}else{
return false;
}
}
Vet inte riktigt hur det är med åäö i mailadresser (om det är godkänt numera), isf får man väl ändra lite i mönstret. Som det är nu godkänns de inte av scriptet iaf.
Är det någon som ser skillnaden mellan Peeers funktion ovan som använder eregi och min som använder preg_match?
function checkEmailOK($mail) {
if (!isset($mail) or empty($mail))
return false;
$mail = trim(strtolower($mail));
$pattern2 = '/^[_[a-z]\\d-]+(\\.[_[a-z]\\d-]+)*@[_[a-z]\\d-]+(\\.[_[a-z]\\d-]+)*\\.[a-z][a-z]$/';
$pattern3 = '/^[_[a-z]\\d-]+(\\.[_[a-z]\\d-]+)*@[_[a-z]\\d-]+(\\.[_[a-z]\\d-]+)*\\.[a-z][a-z][a-z]$/';
return (preg_match($pattern2, $mail) || preg_match($pattern3, $mail));
}
Jag tror nämligen inte att "min" server förstår annat än Perls regexp. Denna ihopknåpade historia godkänner inte diverse riktiga epostadresser... :( (Exempelvis påstår den att namn@telia.com inte är en giltig adress... )
Red: Tror att det blev dubbla esc-tecken bakom kulissen överallt nu...
Jag tycker det verkar som att man inte kan ha esc-tecken i en grupp? Hur som helst, oavsett varför ovanstående inte funkar, nedanstående gör det:
function checkEmail($email) {
$email = trim(strtolower($email));
//Måste vara: #@#.# (Om # motsvarar godtyckligt tecken (ett eller flera))
$pattern = "/^(.)+@(.)+\\.(.)+$/";
if (!preg_match($pattern, $email))
return FALSE;
else {
// Innehåller EJ: .., .@, @. mer än ett @ eller börjar/slutar på .
$not = "/(\\.\\.)|(@\\.)|(\\.@)|(@(.)*@)|(\\.$)|(^\\.)/";
if (preg_match($not, $email))
return FALSE;
else {
// Tillåtna tecken är a-z, 0-9, -, _, ., @
$chars = "/^(([a-z])+|([0-9])+|(\\.)|(-)|(_)|(@))+$/";
return preg_match($chars, $email);
}
}
}
Det finns säkert effektivare, bättre och mer fullständiga koller, men denna fungerar i alla fall tillräckligt bra för mitt ändamål. (Tror inte att trippelgenomletning tar märkbart längre tid eller för mycket resurser då den sannolikt ej körs alltför ofta...)
Har precis klivit in lite i php och har problem med ett av ovanstående kodexempel:
function checkEmail($mail, $name) {
if (!isset($mail) or empty($mail))
return false;
$mail = trim($mail);
if (eregi('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$',$mail)){
return "<a href=\"mailto:\"" . $mail . "\">\"" . $name . "</a>";
}else{
return $name;
}
}
Nu har jag modifierat det lite, men det är eg. ingt fel på koden (mig vetligt).
Felet är att funktionen inte ger något tillbaks, inget skrivs ut. Kanske jag gör fel när jag ska kalla på funktionen?
Det jag vill uppnå är:
- Skickar in emailadress & namn från en MySQL-DB in i funktionen.
- Koden ska kolla om emailadressen är "giltig".
- Är den det, skriv ut en mail-länk med avsändarens namn som länktext.
- Är den inte giltig, skriv endast ut namnet.
Det här returnerar alltså inget alls, får heller inget felmeddelande.
MickeA.com > Koden fungerar utmärkt för mig, men du måste skilja på returnera och skriva ut. Funktionen ovan returnerar en sträng som du sedan får skriva ut, den skriver alltså inte ut något självmant
echo checkEmail('user@doman.se','Boop'); kommer att skriva ut en mailto-länk.