On 23-Oct-2000, Fadjar Nurswanto wrote:
> Logika:
> 1. Terima variable dari form.
> 2. Periksa apakah variable email kosong. Jika ya tampilkan pesan error.
> 3. Bila tidak, periksa ada tidaknya karakter @ dan posisinya. Bila tidak ada
> tampilkan pesan error. Bila posisi di awal tampilkan pesan error.
> 4. Bila ada dan posisi tidak di awal, periksa ada tidaknya karakter titik
> (.) dan posisinya. Bila tidak ada dan posisi lebih kecil dari posisi
> karakter @ tampilkan pesan error.

Utk no 4 logikanya yg anda jelaskan salah (tidak seperti yg anda
tuliskan di programnya di bawah).  "Tidak ada" dan "posisi lebih
kecil" tidak masuk akal kalo digabung dengan "dan" karena tidak
mungkin exist bareng, yg tepat pake "atau".

Menurut hukum Moore, (A dan B) kalo di-negasi jadi (~A atau ~B) di
mana "~" artinya "bukan".

TAPI tetap aja, tanda titik di depan @ adalah legal menurut RFC 822,
jadi ngeceknya tetep salah.

> 5. Bila benar semua tampilkan pesan benar.

Ini tidak sufficient untuk ngecek valid tidaknya suatu email address.
Definisi valid bisa banyak, bisa satu atau lebih dari:
- bisa dikirimin email apa nggak ([EMAIL PROTECTED] itu syntaxnya valid
  tapi nggak bisa dikirimin karena nggak ada domain itu)
- syntaxnya conform ke RFC 822 apa nggak

> scriptnya sebagai berikut:(nama file cek_email.php)

Hal2 seperti inilah di mana Regular Expression (regex) jadi teman baik,
juga utk masalah2 pattern matching lainnya. Karena web development itu
terikat erat dengan string manipulation, mempelajari regex adalah
investment yang sangat berharga. Lihat penjelasan saya di bawah.

> <?
>     $status=0;
>     if($email=="")
>     {
>         echo "Email salah";
>     }
>     else
>     {
>         $p_email=strlen($email);
>         for($i=0;$i<$p_email;$i++)
>         {
>             $hasil=substr($email,$i,1);
>             if($hasil=="@")
>             {
>                 $status=1;
>                 $pos1=$i;
>                 break;
>             }
>         }
>         if($status==1 and $pos1>0)
>         {
>             for($i=0;$i<$p_email-1;$i++)
>             {
>                 $hasil=substr($email,$i,1);
>                 if($hasil==".")
>                 {
>                     $status=1;
>                     $pos2=$i;
>                     break;
>                 }
>             }
>             if($status==1 and $pos2>$pos1+1 and $p_email>$pos+1)
>             {echo "Email benar";}
>             else {echo "Email salah";}
>             }
>             else {echo "Email salah";}
>     }
> ?>

Semuanya di atas bisa dicapture dengan satu baris regex:

if(preg_match("^.+@([\w\d]+\.?)+\.\w\w+$", $email))
{
        # syntaxnya _sepertinya_ valid
}
else
{
        # syntaxnya sudah jelas salah
}

Kalo pake PHP versi di bawah 3.0.9 karena tidak punya PCRE jadi pake
seperti ini:
        if(ereg("^.+@([A-Za-z0-9]+\.?)+\.[A-Za-z][A-Za-z]+$", $email))

Tentu saja pattern saya itu jauh dari sempurna (menurut RFC 822), dan
tidak hanya satu cara itu. Di buku Perl Cookbook ditulis bahwa kita
bisa menggunakan regex yang ada di halaman terakhir dari buku
Mastering Regular Expression utk mengecek conformity ke RFC 822, asal
sebelumnya di-strip dulu comment di emailnya. Panjang regexnya 6598
bytes.

Se-strict mana anda mau ngecek itu tergantung kebutuhan dan kemampuan
anda. Jika "asal keliatan kayak email address beneran" udah cukup buat
anda ya nggak usah ngecek deliverable apa nggak. Yang jelas tidak ada
cara yg menjamin 100% bahwa suatu email address itu valid dalam arti
deliverable dan syntaxnya betul, pasti harus ada yg dikorbankan
(compromise).

Ronny


>>>>> 2.5 Mbps InternetShop >> InternetZone << Margonda Raya 340 <<<<<
Berhenti langganan kirim email ke [EMAIL PROTECTED]
Arsip di http://www.mail-archive.com/[email protected]/

Kirim email ke