Periksa Alamat E-mel dengan JavaScript dan Ungkapan Biasa

Beberapa ketika yang lalu saya memasang a Pemeriksa Kekuatan Kata Laluan menggunakan JavaScript dan Ungkapan Biasa. Dengan catatan yang sama, anda juga dapat memeriksa struktur alamat e-mel yang menggunakan metodologi ungkapan biasa (regex) yang sama.

Sekiranya elemen borang anda mempunyai id = "alamat e-mel" dan anda menambah borang onSubmit = ”return checkEmail ();", Ini adalah fungsi Javascript yang dapat Anda gunakan untuk mengembalikan peringatan jika alamat e-mel memiliki struktur yang valid atau tidak:

function checkEmail() {
var email = document.getElementById('emailaddress');
var filter = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
if (!filter.test(email.value)) {
alert('Please provide a valid email address');
email.focus;
return false;
}
}

Fungsi mengesahkan kandungan e-mel ke penapis. Sekiranya perbandingan gagal, ia muncul amaran dan mengembalikan fokus ke medan alamat e-mel!

41 Komen

  1. 1

    Untuk borang dengan banyak alamat e-mel, ada baiknya melakukan class = "emailaddress". Sekiranya anda mempunyai perpustakaan prototaip.js (http://www.prototypejs.org) disertakan di halaman anda boleh melakukan perkara seperti ini:

    var valid = true;
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    $$ ('. emailaddress'). masing-masing (fungsi (e-mel) {
    jika (! filter.test (e-mel. nilai)) {
    amaran (? Sila berikan alamat e-mel yang sah?);
    e-mel.fokus;
    sah = salah;
    }
    });
    kembali sah;

  2. 5
  3. 7

    Saya suka idea itu, tetapi saya akan ragu-ragu untuk menggunakan ungkapan biasa ini tanpa penerangan mengenai alamat e-mel sah yang tidak diterima dan alamat haram mana yang dibenarkan.

    Untuk contoh ungkapan biasa yang melakukan pekerjaan yang baik di samping penjelasan mengenai kes yang tidak diliputi, lihat ini:

    http://www.regular-expressions.info/email.html

    Keutamaan peribadi saya adalah merangkumi sebilangan besar kes mudah dan mengeluarkan amaran untuk perkara lain daripada menolaknya. Sekiranya Bob benar-benar mahu tunduk bob@com.museum daripada bob@museum.com, mengapa tidak membiarkannya?

    • 8

      Hai Reg,

      Anda boleh menguji Regex menggunakan Penguji Regex dalam talian.

      Juga, pasti ada banyak lagi yang boleh dilakukan jika anda ingin memastikannya alamat e-mel sah mengikut RFC.

      Terdapat beberapa sebab untuk tidak membenarkan seseorang memasukkan alamat e-mel yang tidak sah:
      1. Mereka akan kesal kepada anda apabila e-mel yang mereka harapkan tidak akan dilalui - tidak kira sama ada anda salah atau tidak, alamat tersebut salah dimasukkan.
      2. Sekiranya com.museum adalah domain yang sah dan, katakanlah, Yahoo! mengendalikannya - sebarang alamat e-mel yang dilantunkan akan memberi kesan negatif terhadap reputasi syarikat anda untuk penghantaran e-mel. Ini boleh menyebabkan semua e-mel syarikat anda disekat.
      3. Sekiranya penyedia perkhidmatan e-mel anda membenarkan anda memasukkan bob@com.museum, anda juga akan membayar untuk setiap e-mel yang dihantar ke alamat e-mel tersebut sehingga mereka berhenti melanggan alamat tersebut kerana melantun. Saya akan menghindari sebarang ESP yang membenarkan alamat e-mel yang tidak betul seperti itu - mereka hanya mengambil wang anda!

      Terima kasih kerana berhenti!
      Doug

  4. 9
  5. 10

    Terdapat cara yang lebih mudah untuk menulis ungkapan:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    - Dengan pengubah terakhir / saya tidak perlu menunjukkan julat huruf besar.
    - Saya tidak tahu apa-apa TLD dengan nombor di dalamnya.
    Sebagai catatan, saya membenarkan TLD dengan hingga 6 watak; yang baru tiba dengan kerap dan anda tidak akan pernah tahu (baiklah, masa depan somme mungkin juga mempunyai nombor di dalamnya, saya tahu).

  6. 11

    Hi there,

    Saya akan menggunakan ini dalam bentuk yang ada dalam masa nyata, tetapi ini nampaknya tidak berlaku dalam masa nyata seperti pemeriksa kekuatan kata laluan anda ...

    Atau, adakah saya tidak tahu apa-apa, dan ia tidak berfungsi untuk saya?

  7. 12

    btw, saya sangat suka apa yang anda jalankan di sini, tutorial anda sangat mudah, saya pasti akan menanda buku ini….

  8. 13
  9. 16
  10. 17

    Hanya pembetulan kecil: Ungkapan biasa mempunyai tambahan () + di akhir. Ia mesti membaca:

    ^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+[a-zA-Z0-9]{2,4}$

    Dengan yang pertama, TLD yang panjang akan diterima (yang tidak salah secara intrinsik seperti yang ditunjukkan oleh orang lain, tetapi jika itu maksudnya maka ungkapan itu dapat dipersingkat).

  11. 18

    Bolehkah anda jelaskan ungkapan biasa kod ini dan bagaimana cara kerjanya? Juga mengenai .test - Adakah .test pernyataan lalai dalam javascript untuk memeriksa perkara seperti yang anda lakukan dalam kod di atas?

  12. 19
  13. 20

    Ini adalah kod pendek untuk ungkapan e-mel-

    fungsi mengesahkanEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9.
    kembalikan e-melPattern.test (id);

    }
    Deepak Rai
    varanasi

  14. 21
  15. 22
  16. 23

    Terima kasih, tetapi terdapat ralat dalam regex ini. Saya bukan pakar regex, tetapi saya mencuba e-mel:

    ujian @ ujian

    dan ia melewati regex ... Saya perhatikan ia kurang lolos dari "". jadi semestinya:

    /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/

  17. 24
  18. 27

    Baiklah, ini hanya pemeriksaan kasar tetapi tidak 100% tepat, contohnya ini tidak dapat dilakukan john_doe. @ gmail.com yang sebenarnya bukan alamat e-mel yang sah (titik tidak dibenarkan sebagai watak terakhir di bahagian e-mel tempatan).
    Juga akan diterima john…doe@gmail.com yang juga tidak sah kerana tidak boleh lebih dari satu titik dalam urutan.

    Ini hanya beberapa kelemahan yang saya perhatikan pada pandangan pertama.
    Niat saya tidak memalukan hanya untuk menunjukkan perkara ini sekiranya seseorang merancang untuk menggunakannya sebagai pemeriksaan keselamatan - tidak cukup selamat.

    Untuk maklumat mengenai alamat e-mel yang sah, periksa ini: http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    Deepak,

    Sebenarnya, saya rasa anda perlu menggunakan titik pelarian untuk titik (“.”). Jadi, fungsi anda seharusnya, sebagai gantinya:

    fungsi mengesahkanEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9.
    kembalikan e-melPattern.test (id);

    }

    Jika tidak, titik itu bermaksud "watak apa pun". Saya percaya watak khas seperti itu perlu dilarikan.

    Regards,

    Federico

  20. 29

    fungsi mengesahkanEmail (fld) {
    ralat var = ””;
    var tfld = trim (fld.value); // nilai medan dengan ruang kosong dipotong
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var haramChars = / [(),; \ \ []] /;

    if (fld.value == "Masukkan Alamat e-mel anda") {

    error = "Sila masukkan alamat E-mel anda.n";
    } lain jika (! emailFilter.test (tfld)) {// uji e-mel untuk watak haram

    error = "Sila masukkan alamat e-mel yang sah.n";
    } lain jika (fld.value.match (haramChars)) {

    error = "Sila masukkan alamat e-mel yang sah.n";
    }
    ralat pengembalian;
    }

  21. 30

    fungsi mengesahkanEmail (fld) {
    ralat var = ””;
    var tfld = trim (fld.value); // nilai medan dengan ruang kosong dipotong
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var haramChars = / [(),; \ \ []] /;

    if (fld.value == "Masukkan Alamat e-mel anda") {

    error = "Sila masukkan alamat E-mel anda.n";
    } lain jika (! emailFilter.test (tfld)) {// uji e-mel untuk watak haram

    error = "Sila masukkan alamat e-mel yang sah.n";
    } lain jika (fld.value.match (haramChars)) {

    error = "Sila masukkan alamat e-mel yang sah.n";
    }
    ralat pengembalian;
    }

  22. 31

    fungsi mengesahkanEmail (fld) {
    ralat var = ””;
    var tfld = trim (fld.value); // nilai medan dengan ruang kosong dipotong
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var haramChars = / [(),; \ \ []] /;

    if (fld.value == "Masukkan Alamat e-mel anda") {

    error = "Sila masukkan alamat E-mel anda.n";
    } lain jika (! emailFilter.test (tfld)) {// uji e-mel untuk watak haram

    error = "Sila masukkan alamat e-mel yang sah.n";
    } lain jika (fld.value.match (haramChars)) {

    error = "Sila masukkan alamat e-mel yang sah.n";
    }
    ralat pengembalian;
    }

  23. 32

    fungsi mengesahkanEmail (fld) {
    ralat var = ””;
    var tfld = trim (fld.value); // nilai medan dengan ruang kosong dipotong
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var haramChars = / [(),; \ \ []] /;

    if (fld.value == "Masukkan Alamat e-mel anda") {

    error = "Sila masukkan alamat E-mel anda.n";
    } lain jika (! emailFilter.test (tfld)) {// uji e-mel untuk watak haram

    error = "Sila masukkan alamat e-mel yang sah.n";
    } lain jika (fld.value.match (haramChars)) {

    error = "Sila masukkan alamat e-mel yang sah.n";
    }
    ralat pengembalian;
    }

  24. 33
  25. 34
  26. 35
  27. 36
  28. 37
  29. 38
  30. 39
  31. 40

Apa yang anda fikir?

Laman web ini menggunakan Akismet untuk mengurangkan spam. Ketahui bagaimana data komen anda diproses.