tolong lakukan ini dengan benar, terlalu banyak situs web yang tidak suka alamat email saya "[email protected]", tidak semua domain tingkat atas mengakhirinya 2 atau 3 huruf.
Ian Ringrose
41
Setiap dukungan untuk penggunaan cek regex untuk e-mail saya 100% menentang. Saya lelah diberi tahu bahwa alamat email saya "[email protected]" tidak valid. Opsi terbaik adalah meminta pengguna untuk mengetikkan email mereka dua kali dan jika Anda HARUS menggunakan pemeriksa regex, maka beri tahu pengguna bahwa alamat email mereka tampaknya tidak valid dan tanyakan apakah mereka yakin mereka mengetiknya. Baik. Bahkan melangkah lebih jauh dengan menunjukkan APA yang tidak memeriksa dalam cek regexp, tetapi JANGAN menghentikan mereka dari mengirimkan formulir.
Soundfx4
17
@ Soundfx4: ini harus jawaban THE, dan diterima seperti itu. Menguji kebenaran alamat adalah hal bodoh yang harus dilakukan - cara terbaik untuk membuat pelanggan frustrasi. Saya meminta alamat untuk diketik dua kali dan mengisyaratkan bahwa ada beberapa masalah yang mungkin terjadi (hilang @, ;comdll.) Dan membiarkan pengguna memperbaikinya jika mereka mau (dan menerima apa pun yang mereka kirimkan kepada saya)
WoJ
4
Saya sangat setuju dengan jawaban yang diberikan oleh WoJ. Format alamat email yang valid terlalu rumit untuk diperiksa dengan ekspresi reguler yang sederhana. Satu-satunya cara untuk memastikan bahwa alamat itu valid adalah dengan mencobanya.
Nicole
Jawaban:
4948
Menggunakan ekspresi reguler mungkin adalah cara terbaik. Anda dapat melihat banyak tes di sini (diambil dari kromium )
function validateEmail(email){const re =/^(([^<>()\[\]\\.,;:\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,}))$/;return re.test(String(email).toLowerCase());}
Berikut adalah contoh dari expresi reguler yang menerima unicode:
const re =/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
Tetapi perlu diingat bahwa seseorang tidak hanya bergantung pada validasi JavaScript. JavaScript dapat dengan mudah dinonaktifkan. Ini harus divalidasi di sisi server juga.
Berikut ini contoh tindakan di atas:
function validateEmail(email){const re =/^(([^<>()[\]\\.,;:\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,}))$/;return re.test(email);}function validate(){const $result = $("#result");const email = $("#email").val();
$result.text("");if(validateEmail(email)){
$result.text(email +" is valid :)");
$result.css("color","green");}else{
$result.text(email +" is not valid :(");
$result.css("color","red");}returnfalse;}
$("#validate").on("click", validate);
<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><form><p>Enter an email address:</p><inputid='email'><buttontype='submit'id='validate'>Validate!</button></form><h2id='result'></h2>
Regex ini menghilangkan email yang valid dan sedang digunakan. Jangan gunakan. Google untuk "RFC822" atau "RFC2822" untuk mendapatkan regex yang tepat.
Randal Schwartz
42
Ini bahkan tidak menerima contoh di RFC 822. Beberapa kasus sederhana tidak cocok dengan \ @ b @ c.com, a(b)@c.com. Lihat RFC untuk lebih lanjut. Berikut adalah regex yang tidak akan menolak alamat yang valid [^ @] + @ [^ @] + \. [^ @] + Dan melindungi dari kesalahan umum.
Vroo
126
@GoodPerson Saya baru saja mencoba mengirim email n @ ai untuk memberitahunya mereka memiliki alamat email yang keren. Namun sayang, gmail tidak akan membiarkan saya. Saya menduga siapa pun yang memiliki masalah lebih besar untuk berkomunikasi dengan orang lain melalui email daripada hanya validasi javascript situs saya! Tetapi terima kasih telah mengatasi tantangan ini.
Ben Roberts
26
Ini adalah solusi yang tampaknya bagus untuk sebagian besar penutur bahasa Inggris asli, tetapi gagal dalam tes Turki (lihat Joel Spolsky). Sebagian besar surat unicode diizinkan, dan misalnya di Argentina, alamat seperti "ñoñó[email protected]" sangat normal. joelonsoftware.com/articles/Unicode.html
oligofren
139
Anda tidak dapat memvalidasi alamat email, titik. Satu-satunya yang dapat memvalidasi alamat email adalah penyedia alamat email tersebut. Misalnya, jawaban ini mengatakan alamat email ini: %[email protected], "%2"@gmail.com, "a..b"@gmail.com, "a_b"@gmail.com, [email protected], [email protected] , [email protected]semuanya valid, tetapi Gmail tidak akan pernah mengizinkan alamat email ini. Anda harus melakukan ini dengan menerima alamat email dan mengirim pesan email ke alamat email itu, dengan kode / tautan yang harus dikunjungi pengguna untuk mengonfirmasi validitas.
Kevin Fegan
830
Saya sedikit mengubah jawaban Jaymon untuk orang-orang yang ingin validasi sangat sederhana dalam bentuk:
anystring@anystring.anystring
Ekspresi reguler:
/\S+@\S+\.\S+/
Contoh fungsi JavaScript:
function validateEmail(email){var re =/\S+@\S+\.\S+/;return re.test(email);}
console.log(validateEmail('[email protected]'));
Anda dapat menerapkan sesuatu 20x selama itu dapat menyebabkan masalah bagi beberapa pengguna dan mungkin tidak valid di masa depan, atau Anda dapat mengambil versi ImmortalFirefly untuk memastikan mereka setidaknya berupaya agar terlihat nyata. Bergantung pada aplikasi Anda, kemungkinan besar akan menjumpai seseorang akan marah karena Anda tidak menerima email tidak konvensional mereka, daripada seseorang yang menyebabkan masalah dengan memasukkan alamat email yang tidak benar-benar ada (yang dapat mereka lakukan dengan memasukkan alamat email RFC2822 100% valid tetapi menggunakan nama pengguna atau domain tidak terdaftar). Terpilih!
user83358
82
@ImmortalFirefly, regex yang Anda berikan akan benar-benar cocok name@[email protected]. Coba tempel baris Anda ke konsol JavaScript. Saya yakin niat Anda hanya mencocokkan seluruh teks, yang akan memerlukan awal teks '^' dan operator akhir teks '$'. Yang saya gunakan adalah/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test('name@[email protected]')
OregonTrail
8
Berdasarkan validasi ini, email ini valid: check @ this..com
Ehsan
4
Hm Wikipedia mengatakan itu "[email protected]"@example.comadalah alamat email yang valid. /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test('"[email protected]"@example.com') // false. Ups.
Standar resmi dikenal sebagai RFC 2822 . Ini menjelaskan sintaksis yang harus dipatuhi oleh alamat email yang valid. Anda dapat ( tetapi Anda tidak boleh - baca terus ) menerapkannya dengan ekspresi reguler ini:
(...) Kami mendapatkan implementasi RFC 2822 yang lebih praktis jika kami menghilangkan sintaks menggunakan tanda kutip ganda dan tanda kurung siku. Masih akan cocok dengan 99,99% dari semua alamat email yang digunakan saat ini.
Perubahan lebih lanjut yang dapat Anda lakukan adalah mengizinkan domain tingkat atas kode dua huruf apa saja, dan hanya domain tingkat atas generik tertentu. Regex ini menyaring seperti alamat email dummy[email protected] . Anda perlu memperbaruinya saat domain tingkat atas baru ditambahkan .
Jadi, bahkan ketika mengikuti standar resmi, masih ada trade-off yang harus dilakukan. Jangan membabi buta menyalin ekspresi reguler dari perpustakaan online atau forum diskusi. Selalu mengujinya pada data Anda sendiri dan dengan aplikasi Anda sendiri.
NB: "Dalam penggunaan aktual hari ini " mungkin valid ketika kode ditulis, kembali 200x. Kode kemungkinan akan tetap digunakan di luar tahun itu. (Jika saya memiliki uang receh untuk setiap "meh, tidak akan ada yang akan menggunakan TLD + 4-buletin kecuali yang spesifik" saya harus memperbaikinya, saya bisa menyudutkan pasar tembaga dan nikel dunia;))
Juga, bagian pertama harus (?: [Az dengan huruf A untuk menghindari negatif palsu ketika pengguna memasukkan alamat email mereka.
Don Rolling
9
@ DonRolling Jangan lakukan itu. Itu tidak hanya berarti "A ke Z, a ke z", itu juga berarti "[\] ^ _` "karena itu berada di antara " Z "dan" a ". Gunakan \w, atau lebih baik, hanya huruf kecil alamat email sebelum melakukan apa pun karena itu konvensi.
kirb
5
"Anda harus memperbaruinya saat domain tingkat atas baru ditambahkan." Nah, sangat banyak untuk itu sekarang - ada lebih dari 1500 TLD yang diakui.
Nathan Osman
377
Wow, ada banyak kerumitan di sini. Jika semua yang ingin Anda lakukan hanyalah menangkap kesalahan sintaksis yang paling jelas, saya akan melakukan sesuatu seperti ini:
^\S+@\S+$
Biasanya menangkap kesalahan paling jelas yang dibuat pengguna dan memastikan bahwa formulir sebagian besar benar, yang merupakan inti dari validasi JavaScript.
+1 sebagai mengirim email dan melihat apa yang terjadi adalah satu-satunya cara pasti untuk memvalidasi alamat email, tidak perlu melakukan lebih dari sekadar kecocokan regex.
kommradHomer
20
Anda masih dapat membuatnya tetap sederhana tetapi melakukan sedikit lebih banyak untuk memastikan ia memiliki "." suatu tempat setelah @ diikuti oleh hanya angka atau digit, jadi hal-hal seperti saya @ sini, saya @ sini @, dan saya @ herecom tidak valid ... ^ \ S + @ \ S + [\.] [0-9a-z ] + $
Tim Franklin
14
Saya pikir alamat email bisa berisi spasi. Mungkin lebih baik menggunakan.+@.+
Sam
11
/\S+@\S+/.test("áéíóúý@ÁÉÍÓÚÝð")true
gtournie
111
@ gtournie Tidak ada yang peduli. Tidak ada yang akan memasukkan itu ke dalam bidang email secara tidak sengaja , dan itu semua validasi front-end adalah untuk: Untuk mencegah orang dari secara tidak sengaja memasukkan sedikit informasi yang salah, seperti nama mereka, di bidang email.
meagar
330
Ada sesuatu yang harus Anda pahami begitu Anda memutuskan untuk menggunakan ekspresi reguler untuk memvalidasi email: Ini mungkin bukan ide yang baik . Setelah Anda sepakat dengan hal itu, ada banyak implementasi di luar sana yang dapat membantu Anda di sana, artikel ini merangkumnya dengan baik.
Singkatnya, bagaimanapun, satu-satunya cara untuk benar-benar yakin bahwa apa yang dimasukkan pengguna sebenarnya adalah email adalah benar-benar mengirim email dan melihat apa yang terjadi. Selain itu semua hanya tebakan.
-1 mengapa saya ingin menghabiskan waktu untuk memvalidasi alamat email yang bahkan tidak lulus kontrol regex?
kommradHomer
63
@kommradHomer - alamat "regex invalid" hampir selalu valid, karena regex apa pun yang Anda gunakan untuk memvalidasi alamat email hampir pasti salah dan akan mengecualikan alamat email yang valid. Sebuah alamat email adalah name_part@domain_partdan praktis apa pun, termasuk seorang @, berlaku di name_part tersebut; Alamat foo@[email protected]itu sah, meskipun harus diloloskan sebagai foo\@bar@machine..... Setelah email mencapai domain, misalnya 'example.com', domain tersebut dapat merutekan email "secara lokal" sehingga nama pengguna dan nama host "aneh" dapat ada.
Stephen P
6
Regex kedua dalam jawaban voyager di stackoverflow.com/a/1373724/69697 praktis untuk digunakan dan seharusnya hampir tidak memiliki negatif palsu. Saya setuju dengan @kommradHomer di sini - mengapa mengirim email jika Anda tidak perlu? Saya dapat memahami ketidaksukaan refleksif untuk regex yang tidak dapat dipahami dan keinginan untuk menjaga kode tetap sederhana, tetapi ini adalah beberapa baris kode yang dapat menyelamatkan server Anda dari banyak masalah dengan segera mengeluarkan item yang pasti tidak valid. Regex sendiri tidak membantu, tetapi berfungsi sebagai pelengkap yang baik untuk validasi serveride.
Ben Regenspan
6
@dmur saya mengakui "hampir selalu valid" mungkin melebih-lebihkannya, tetapi saya sudah terlalu sering alamat email saya bekerja dengan baik oleh situs web, hanya karena saya memiliki .usdomain atau karena saya menggunakan a +di sebelah kiri the @- banyak tempat telah memperbaiki kesalahan mengerikan ini, tetapi bagian lokal (kiri @) dapat berupa apa saja yang diinginkan pemilik domain. -> "[email protected]"@example.com <- adalah alamat email yang valid.
Stephen P
8
@kommradHomer "Alamat regex-tidak valid adalah% 100 alamat tidak valid." Maafkan saya ... permisi? Apakah Anda tahu sudah berapa kali saya diberi tahu bahwa [email protected] BUKAN email yang valid padahal ternyata BENAR-BENAR BENAR? Logika Anda sangat cacat. Saya telah mengirimkan formulir dengan email sebagai berikut: thisisafakeemailbutitwillpassyourstupidregexcheck@regexchecksareretarded.com Dan coba tebak? YANG LULUS REGEX memeriksa ... tetapi BUKAN email yang valid (meskipun secara teknis IS, tapi saya berjanji itu tidak ada ... belum menggaruk dagunya ) Seperti yang dikatakan banyak orang, IT IS A BAD IDEA ....
Soundfx4
211
HTML5 sendiri memiliki validasi email. Jika browser Anda mendukung HTML5 maka Anda dapat menggunakan kode berikut.
Sebuah alamat e-mail yang valid adalah string yang cocok dengan emailproduksi ABNF berikut, set karakter yang merupakan Unicode.
email =1*( atext /".")"@" label *("." label )
label =let-dig [[ ldh-str ]let-dig ]; limited to a length of63 characters by RFC 1034 section 3.5
atext =< as defined in RFC 5322 section 3.2.3>let-dig =< as defined in RFC 1034 section 3.5>
ldh-str =< as defined in RFC 1034 section 3.5>
Persyaratan ini adalah pelanggaran yang disengaja terhadap RFC 5322, yang mendefinisikan sintaks untuk alamat email yang secara bersamaan terlalu ketat (sebelum karakter "@"), terlalu kabur (setelah karakter "@"), dan terlalu longgar (memungkinkan komentar , karakter spasi putih, dan string kutipan dalam perilaku yang tidak dikenal oleh sebagian besar pengguna) agar praktis digunakan di sini.
Ekspresi reguler yang kompatibel dengan JavaScript dan Perl adalah implementasi dari definisi di atas.
ini bagus, tetapi masalah dengan ini adalah bahwa itu harus di dalam formtag dan diserahkan oleh submitinput, yang tidak semua orang memiliki kemewahan untuk melakukannya. Juga, Anda tidak dapat benar-benar menata pesan kesalahan.
Jason
3
Saya telah menambahkan jawaban di bawah ini yang membebaskan Anda dari formulir dan mengirimkan. Tapi ya, browser biasanya juga hanya menerapkan beberapa pemeriksaan masuk akal dan bukan validasi RFC 822 lengkap.
Boldewyn
8
@ br1: itu tidak valid hanya karena tidak ada "tingkat" domain tingkat atas. apa intranet Anda memiliki tekad untuk beberapa IP?
domba terbang
7
Jenis bidang email Html5 menerima email seperti pengguna @ email
Puce
1
Catatan @ komentar Puce: Input email HTML 5 menerima user@emailsedangkan, sebagai contoh, PHP filter_vartidak. Ini bisa menyebabkan masalah.
Ini jelas serbaguna dan memungkinkan karakter internasional yang sangat penting, sambil tetap menegakkan format dasar [email protected]. Ini akan memblokir ruang yang secara teknis diizinkan oleh RFC, tetapi mereka sangat jarang sehingga saya senang melakukannya.
Inilah yang sedang saya lakukan. Semua jawaban "rumit" ini menghasilkan masalah: mereka tidak mengizinkan IDN kode kecil atau menggunakan seperangkat TLD tetap atau tidak perlu membatasi pengguna untuk tidak menggunakan karakter seperti [@ çμ.ö dalam awalan email mereka (sebelum @) atau nama domain. JavaScript di frontend (bukan untuk penggunaan backend) tidak cukup untuk memvalidasi karena alasan keamanan. Jadi mengapa tidak hanya membantu pengguna mencegah kesalahan ketik dasar. Kesalahan ketik dasar adalah: lupakan TLD atau awalan pengguna (sebelum @) atau bagian-domain atau salah ketik @sebagai .(atau sebaliknya). Karena kita harus lebih membatasi pada sisi server.
Hafenkranich
Untuk beberapa alasan aneh [email protected]tidak bekerja dengan pola ini
einstein
2
Menurut regex Anda, "_.............. [email protected]" valid, dan seharusnya tidak!
Kamal Nayan
1
Inilah RegEx yang dinyatakan dengan contoh, jika Anda ingin mengotak-atik solusi ini: regex101.com/r/AzzGQU/2
ryanm
7
Regex ini benar. Jika ada yang memasukkan email mereka, a@b@[email protected][email protected]maka mungkin mereka layak untuk bersenang-senang? : D
corysimmons
94
Di browser modern, Anda dapat membangun di atas jawaban @ Sushil dengan JavaScript murni dan DOM :
Saya telah mengumpulkan contoh di biola http://jsfiddle.net/boldewyn/2b6d5/ . Dikombinasikan dengan deteksi fitur dan validasi tanpa tulang dari Squirtle's Answer , itu membebaskan Anda dari pembantaian ekspresi reguler dan tidak mengganggu browser lama.
Ini adalah ide cerdas untuk menyoal masalah tetapi tidak berhasil karena browser juga memiliki validasi jelek. Misalnya .@amemvalidasi seperti truedalam versi Chrome, Firefox, dan Safari saat ini.
Hank
13
@HenryJackson Sayangnya, dalam hal ini ya. Ini karena menurut RFC itu adalah alamat email yang valid (pikirkan intranet). Browser akan dipanggang, jika mereka memvalidasi terlalu sempit dan menghasilkan negatif palsu.
Boldewyn
3
Diperbarui untuk berisi deteksi fitur dan degradasi yang anggun, sekarang tidak merusak browser baru tetapi menggunakan regex yang Anda suka.
Ronny
Solusi yang bagus. Sayangnya ini hanya untuk HTML5 +.
Edward Olamisan
3
Sejauh ini, ini adalah solusi terbaik untuk pertanyaan awal. Ya, ia menggunakan HTML5, tetapi sebagian besar aplikasi yang membutuhkan tingkat akurasi ini sudah pasti akan mengandalkan HTML5 dengan cara lain, jadi titik diperdebatkan. Tidak mungkin bagi kami untuk menentukan apakah email seseorang valid tanpa meminta mereka untuk memverifikasi itu, jadi kami benar-benar tidak perlu menginvestasikan begitu banyak waktu atau upaya untuk memvalidasi itu. Pemeriksaan cepat untuk setiap sintaks yang jelas atau upaya kenakalan adalah semua upaya yang harus kita keluarkan.
@ Kato: Ini menggunakan beberapa ekstensi yang tidak kompatibel, termasuk (?>untuk berhenti mundur dan (?<angle><)…(?(angle)>)untuk menghindari memberikan panjang lebar |.
Ry-
60
Semua alamat email berisi simbol 'at' (yaitu @). Uji kondisi yang diperlukan:
email.indexOf("@")>0
Jangan repot-repot dengan hal yang lebih rumit. Sekalipun Anda dapat dengan sempurna menentukan apakah suatu email adalah RFC-secara sintaksis valid, itu tidak akan memberi tahu Anda apakah itu milik orang yang menyediakannya. Itu yang sangat penting.
bagaimana jika akan ada lebih dari satu simbol '@'? simbol terbatas lainnya? Validasi ini tidak dapat dipercaya ...
eatmypants
56
Validasi yang benar dari alamat email sesuai dengan RFC bukanlah sesuatu yang dapat dicapai dengan ekspresi reguler satu-liner. Artikel dengan solusi terbaik yang saya temukan di PHP adalah Apa alamat email yang valid? . Jelas, itu telah porting ke Jawa. Saya pikir fungsinya terlalu kompleks untuk porting dan digunakan dalam JavaScript. Port JavaScript / node.js: https://www.npmjs.com/package/email-addresses .
Praktik yang baik adalah memvalidasi data Anda di klien, tetapi periksa kembali validasinya di server. Dengan mengingat hal ini, Anda dapat dengan mudah memeriksa apakah suatu string terlihat seperti alamat email yang valid pada klien dan melakukan pemeriksaan ketat pada server.
Inilah fungsi JavaScript yang saya gunakan untuk memeriksa apakah string terlihat seperti alamat email yang valid:
lastAtPos < lastDotPos: Terakhir @harus sebelum terakhir .karena @tidak dapat menjadi bagian dari nama server (sejauh yang saya tahu).
lastAtPos > 0: Harus ada sesuatu (nama pengguna email) sebelum yang terakhir @.
str.indexOf('@@') == -1: Seharusnya tidak ada @@di alamat. Bahkan jika @muncul sebagai karakter terakhir dalam nama pengguna email, itu harus dikutip sehingga "akan menjadi antara itu @dan yang terakhir @di alamat.
lastDotPos > 2: Harus ada setidaknya tiga karakter sebelum titik terakhir, misalnya [email protected].
(str.length - lastDotPos) > 2: Seharusnya ada cukup karakter setelah titik terakhir untuk membentuk domain dua karakter. Saya tidak yakin apakah tanda kurung diperlukan.
Fn ini terlihat bagus, tetapi apakah ini lebih baik daripada regex yang ditulis dalam jawaban teratas?
Atul Goyal
4
Aku meragukan itu. Saya menggunakannya hanya untuk memeriksa apakah string terlihat seperti email dan meninggalkan detailnya ke kode sisi server.
Milose Rašic
Ini memvalidasi string apa pun seperti 'aaaa', yaitu tanpa '@' dan '.'
Gennady Shumakher
1
Seharusnya tidak. lastIndexOf () harus mengembalikan -1 jika tidak menemukan jarum.
Miloš Ršic
"Bahkan jika @muncul sebagai karakter terakhir dalam nama pengguna email, itu harus dikutip sehingga "akan menjadi antara itu @dan yang terakhir @di alamat." Bagaimana dengan "@@"@example.com?
Ini menyaring domain yang selalu populer .museumdan .travel(karena batas 4 char setelah .)
bobobobo
4
Mengubah {2,4} menjadi {2,6} tidak akan menjadi masalah
Anton N
11
@Anton N: Ada sekitar satu trilyun masalah lain juga; final {2,4}hanyalah indikator yang berguna daripadanya (seperti dalam "ketika Anda melihat kesalahan itu, orang lain cenderung ada"). Yang paling mendasar adalah kurangnya +bagian lokal; kotak komentar ini terlalu kecil untuk menunjukkan semua kesalahan yang dilakukan di atas.
Piskvor meninggalkan gedung
37
Mengapa Anda tidak bisa begitu saja melakukannya return filter.test(email.value);?
MT.
3
@AntonN: Sekarang kami memiliki 10+ TLD karakter ( xn--clchc0ea0b2g2a9gcd). Masih tidak masalah?
Mengapa? Ini didasarkan pada RFC 2822 , yang merupakan standar SEMUA alamat email HARUS dipatuhi. Dan saya tidak yakin mengapa Anda akan repot dengan sesuatu yang "lebih sederhana" ... Anda akan menyalin dan menempelkannya;)
Seringkali ketika menyimpan alamat email dalam database saya membuatnya menjadi huruf kecil dan, dalam praktiknya, regexs biasanya dapat ditandai sebagai huruf tidak peka. Dalam kasus ini, ini sedikit lebih pendek:
Berikut adalah contoh penggunaannya dalam JavaScript (dengan tanda case case iin the end).
var emailCheck=/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;
console.log( emailCheck.test('[email protected]'));
Catatan :
Secara teknis beberapa email dapat menyertakan tanda kutip di bagian sebelum @simbol dengan karakter pelarian di dalam tanda kutip (sehingga pengguna email Anda bisa menjengkelkan dan mengandung hal-hal seperti @dan "..."selama itu ditulis dalam tanda kutip). TIDAK ADA YANG PERNAH ADA INI! Sudah usang. Tapi, itu termasuk dalam standar RFC 2822 yang sebenarnya , dan dihilangkan di sini.
@Kondal kode javascript tidak peka huruf besar-kecil karena /iflag di akhir ekspresi reguler. Saya menyebutkan fakta bahwa itu harus menjadi perbandingan kasus-sensitif, tapi saya akan membuatnya lebih jelas.
Ryan Taylor
Bekerja untuk saya sebagai pesona
Alex
40
Saya sangat menantikan untuk menyelesaikan masalah ini. Jadi saya memodifikasi validasi reguler ekspresi email di atas
Asli /^(([^<>()\[\]\\.,;:\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,}))$/
Anda tidak boleh menggunakan ekspresi reguler untuk memvalidasi string input untuk memeriksa apakah itu email. Ini terlalu rumit dan tidak akan mencakup semua kasus.
Sekarang karena Anda hanya dapat menutupi 90% dari kasing, tulis sesuatu seperti:
function isPossiblyValidEmail(txt){return txt.length >5&& txt.indexOf('@')>0;}
Anda bisa memperbaikinya. Misalnya, 'aaa @' valid. Tapi secara keseluruhan Anda mendapatkan intinya. Dan jangan terbawa ... Solusi 90% sederhana lebih baik daripada solusi 100% yang tidak bekerja.
Hal ini memungkinkan masuknya begitu banyak alamat email yang tidak valid. Itu adalah saran yang tidak berguna.
cazlab
3
Tidak harus mustahil untuk melakukan debug sama sekali. Ada banyak contoh bagus di utas ini yang memvalidasi lebih jauh dari "apakah ada '@' di dalamnya. Contoh Anda memungkinkan" u @ "dianggap sebagai alamat email yang valid. Setidaknya evaluasi apakah ada domain atau sesuatu yang mungkin sebuah domain. Milik Anda adalah contoh dari apa yang saya sebut "coding malas secara agresif." Saya tidak yakin mengapa Anda mempertahankannya karena sejauh ini merupakan jawaban berperingkat terendah di utas.
cazlab
3
@cazlab mungkin Anda benar. Lagipula saya telah dikalahkan. Berbeda dengan Anda, saya tidak berpikir meskipun salah satu kode di atas menunjukkan mudah untuk men-debug cuplikan. Pendekatan 'malas saya' setidaknya dapat ditingkatkan jika diperlukan.
Zo72
3
Apa bedanya dengan menggunakan regex? (.+)@(.*)melakukan hal yang sama, dan lebih pendek.
snostorm
4
+1 - Jika tujuannya adalah untuk memastikan bahwa pengguna setidaknya telah mencoba memasukkan alamat email, maka memeriksa untuk melihat apakah dapat ditentukan bahwa alamat email itu pasti BUKAN email adalah solusi hebat Contoh yang baik adalah jika Anda ingin nama pengguna seseorang menjadi alamat email. Jika pengguna mengetikkan 'sexy_chick_23', maka regex ini dapat digunakan untuk memberi mereka informasi bahwa email diharapkan. Jika sesuatu yang diketik terlihat seperti email, tetapi tidak, maka pengguna tidak akan pernah mendapatkan email 'konfirmasi' dan proses pendaftaran tidak akan pernah divalidasi.
Chris Dutrow
23
Cukup periksa apakah alamat email yang dimasukkan valid atau tidak menggunakan HTML.
IE <10 tidak mendukung ini, dan juga browser Android sendiri.
Frank Conijn
7
Upvoting. IE <10 sudah mati.
Michael Scheper
19
Sulit untuk mendapatkan validator email 100% benar. Satu-satunya cara nyata untuk memperbaikinya adalah dengan mengirim email percobaan ke akun. Yang mengatakan, ada beberapa pemeriksaan dasar yang dapat membantu memastikan bahwa Anda mendapatkan sesuatu yang masuk akal.
Beberapa hal untuk ditingkatkan:
Alih-alih baru RegExp, cobalah menulis regexpseperti ini:
if(reg.test(/@/))
Kedua, periksa untuk memastikan bahwa suatu periode muncul setelah @tanda, dan pastikan bahwa ada karakter antara tanda @dan periode.
Apakah Anda halaman wikipedia? TLD adalah nama host yang valid. Begitu abc@tldjuga alamat email yang valid.
Toto
2
Satu-satunya cara untuk memvalidasi alamat email adalah dengan mengirim email lalu menunggu tanggapan. Selain itu, berikut ini adalah url tempat Anda dapat menguji apakah alamat Anda memenuhi persyaratan RFC822: mythic-beasts.com/~pdw/cgi-bin/emailvalidate . Anda dapat melihat bahwa abc @ xyz adalah alamat yang valid untuk RFC822.
Toto
14
Pembaruan Regex 2018! coba ini
let val ='[email protected]';if(/^[a-z0-9][a-z0-9-_\.]+@([a-z]|[a-z0-9]?[a-z0-9-]+[a-z0-9])\.[a-z0-9]{2,10}(?:\.[a-z]{2,10})?$/.test(val)){
console.log('passed');}
Solusi yang tidak memeriksa keberadaan TLD tidak lengkap.
Hampir semua jawaban untuk pertanyaan ini menyarankan menggunakan Regex untuk memvalidasi alamat email. Saya pikir Regex hanya baik untuk validasi yang belum sempurna. Tampaknya validasi pengecekan alamat email sebenarnya adalah dua masalah terpisah:
1- Validasi format email: Memastikan apakah email tersebut sesuai dengan format dan pola email di RFC 5322 dan apakah TLD benar-benar ada. Daftar semua TLD yang valid dapat ditemukan di sini .
Misalnya, meskipun alamat [email protected]akan melewati regex, itu bukan email yang valid, karena cccbukan domain tingkat atas oleh IANA.
2- Memastikan email itu benar-benar ada: Untuk melakukan ini, satu-satunya pilihan adalah mengirim email kepada pengguna .
-1 Daftar putih menyisakan banyak yang diinginkan - terutama, Anda melewatkan .jobs. Selain itu, ada IDN langsung (sebagian besar, saya akui, hanya secara resmi disetujui setelah posting Anda - misalnya .中國pada Juni 2010; tetapi sebagian besar telah bekerja selama bertahun-tahun).
Piskvor meninggalkan gedung
2
-1 tidak menggunakan domain tingkat atas yang konstan. Selalu ada (dan akan ada misalnya 2013) dapat ditambahkan tld baru.
miho
Ada dikonfirmasi 100 untuk TLD baru. Jawaban ini tidak valid dan tidak boleh digunakan.
Dean Meehan
Ya. Saya sudah mengatakannya pada tahun 2011, dan saya akan mengatakannya lagi: daftar putih domain "khusus" hanya akan menjadi lebih buruk seiring berjalannya waktu, karena lebih banyak TLD disetujui. Ada lebih dari 100 TLD yang sepenuhnya valid yang tidak cocok dengan daftar putih di atas: en.wikipedia.org/wiki/List_of_Internet_top-level_domains
Piskvor meninggalkan gedung
Ini tahun 2015. Ekspresi Anda tidak praktis. Anda harus mencatat ini, tetapi Anda mungkin terlalu sibuk memperbaiki semua halaman tempat Anda menaruh ungkapan ini. Baik?
Berbeda dengan squirtle , ini adalah solusi yang rumit, tetapi ia melakukan pekerjaan yang sangat baik untuk memvalidasi email dengan benar:
function isEmail(email){return/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(email);}
Gunakan seperti ini:
if(isEmail('[email protected]')){ console.log('This is email is valid');}
Pengetahuan saya tentang ekspresi reguler tidak sebaik itu. Itu sebabnya saya memeriksa sintaks umum dengan ekspresi reguler sederhana terlebih dahulu dan memeriksa opsi yang lebih spesifik dengan fungsi lain sesudahnya. Ini mungkin bukan solusi teknis terbaik, tapi dengan cara ini saya lebih fleksibel dan lebih cepat.
Kesalahan paling umum yang saya temui adalah spasi (terutama di awal dan akhir) dan terkadang titik ganda.
function check_email(val){if(!val.match(/\S+@\S+\.\S+/)){// Jaymon's / Squirtle's solution// Do somethingreturnfalse;}if( val.indexOf(' ')!=-1|| val.indexOf('..')!=-1){// Do somethingreturnfalse;}returntrue;}
check_email('check@thiscom');// Returns false
check_email('[email protected]');// Returns false
check_email(' [email protected]');// Returns false
check_email('[email protected]');// Returns true
Mungkin jika Anda menambahkan penjelasan atau deskripsi untuk mengikutinya? Saya tidak berpikir Anda benar-benar perlu menunjukkan html; semua orang yang peduli adalah javascript dan regex. Jika Anda mengurangi jawaban Anda hanya dengan jacascript, dan menambahkan sedikit uraian untuk pergi dengannya, saya akan memberi Anda upvote.
bgmCoder
9
Saya sedang mencari Regex di JS yang melewati semua kasus uji Alamat Email:
@
,;com
dll.) Dan membiarkan pengguna memperbaikinya jika mereka mau (dan menerima apa pun yang mereka kirimkan kepada saya)Jawaban:
Menggunakan ekspresi reguler mungkin adalah cara terbaik. Anda dapat melihat banyak tes di sini (diambil dari kromium )
Berikut adalah contoh dari expresi reguler yang menerima unicode:
Tetapi perlu diingat bahwa seseorang tidak hanya bergantung pada validasi JavaScript. JavaScript dapat dengan mudah dinonaktifkan. Ini harus divalidasi di sisi server juga.
Berikut ini contoh tindakan di atas:
sumber
%[email protected], "%2"@gmail.com, "a..b"@gmail.com, "a_b"@gmail.com, [email protected], [email protected] , [email protected]
semuanya valid, tetapi Gmail tidak akan pernah mengizinkan alamat email ini. Anda harus melakukan ini dengan menerima alamat email dan mengirim pesan email ke alamat email itu, dengan kode / tautan yang harus dikunjungi pengguna untuk mengonfirmasi validitas.Saya sedikit mengubah jawaban Jaymon untuk orang-orang yang ingin validasi sangat sederhana dalam bentuk:
Ekspresi reguler:
Contoh fungsi JavaScript:
sumber
name@[email protected]
. Coba tempel baris Anda ke konsol JavaScript. Saya yakin niat Anda hanya mencocokkan seluruh teks, yang akan memerlukan awal teks '^' dan operator akhir teks '$'. Yang saya gunakan adalah/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test('name@[email protected]')
"[email protected]"@example.com
adalah alamat email yang valid./^[^\s@]+@[^\s@]+\.[^\s@]+$/.test('"[email protected]"@example.com') // false
. Ups.@@@.@
? : DHanya untuk kelengkapan, di sini Anda memiliki regex yang kompatibel dengan RFC 2822
Tekankan milikku
sumber
{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_
{|} ~ -] +) * @ (?: [a-z0-9] (?: [a-z0-9 -] * [a-z0-9])? \.) + [a-z0-9] [a-z0-9 -] * [a-z0-9] /\w
, atau lebih baik, hanya huruf kecil alamat email sebelum melakukan apa pun karena itu konvensi.Wow, ada banyak kerumitan di sini. Jika semua yang ingin Anda lakukan hanyalah menangkap kesalahan sintaksis yang paling jelas, saya akan melakukan sesuatu seperti ini:
Biasanya menangkap kesalahan paling jelas yang dibuat pengguna dan memastikan bahwa formulir sebagian besar benar, yang merupakan inti dari validasi JavaScript.
sumber
.+@.+
/\S+@\S+/.test("áéíóúý@ÁÉÍÓÚÝð")
true
Ada sesuatu yang harus Anda pahami begitu Anda memutuskan untuk menggunakan ekspresi reguler untuk memvalidasi email: Ini mungkin bukan ide yang baik . Setelah Anda sepakat dengan hal itu, ada banyak implementasi di luar sana yang dapat membantu Anda di sana, artikel ini merangkumnya dengan baik.
Singkatnya, bagaimanapun, satu-satunya cara untuk benar-benar yakin bahwa apa yang dimasukkan pengguna sebenarnya adalah email adalah benar-benar mengirim email dan melihat apa yang terjadi. Selain itu semua hanya tebakan.
sumber
name_part@domain_part
dan praktis apa pun, termasuk seorang@
, berlaku di name_part tersebut; Alamatfoo@[email protected]
itu sah, meskipun harus diloloskan sebagaifoo\@bar@machine....
. Setelah email mencapai domain, misalnya 'example.com', domain tersebut dapat merutekan email "secara lokal" sehingga nama pengguna dan nama host "aneh" dapat ada..us
domain atau karena saya menggunakan a+
di sebelah kiri the@
- banyak tempat telah memperbaiki kesalahan mengerikan ini, tetapi bagian lokal (kiri @) dapat berupa apa saja yang diinginkan pemilik domain. -> "[email protected]"@example.com <- adalah alamat email yang valid.HTML5 sendiri memiliki validasi email. Jika browser Anda mendukung HTML5 maka Anda dapat menggunakan kode berikut.
tautan jsFiddle
Dari spesifikasi HTML5 :
sumber
form
tag dan diserahkan olehsubmit
input, yang tidak semua orang memiliki kemewahan untuk melakukannya. Juga, Anda tidak dapat benar-benar menata pesan kesalahan.user@email
sedangkan, sebagai contoh, PHPfilter_var
tidak. Ini bisa menyebabkan masalah.Saya menemukan ini sebagai solusi terbaik:
Ini memungkinkan format berikut:
Ini jelas serbaguna dan memungkinkan karakter internasional yang sangat penting, sambil tetap menegakkan format dasar [email protected]. Ini akan memblokir ruang yang secara teknis diizinkan oleh RFC, tetapi mereka sangat jarang sehingga saya senang melakukannya.
sumber
@
sebagai.
(atau sebaliknya). Karena kita harus lebih membatasi pada sisi server.[email protected]
tidak bekerja dengan pola inia@b@[email protected][email protected]
maka mungkin mereka layak untuk bersenang-senang? : DDi browser modern, Anda dapat membangun di atas jawaban @ Sushil dengan JavaScript murni dan DOM :
Saya telah mengumpulkan contoh di biola http://jsfiddle.net/boldewyn/2b6d5/ . Dikombinasikan dengan deteksi fitur dan validasi tanpa tulang dari Squirtle's Answer , itu membebaskan Anda dari pembantaian ekspresi reguler dan tidak mengganggu browser lama.
sumber
.@a
memvalidasi sepertitrue
dalam versi Chrome, Firefox, dan Safari saat ini.Ini adalah versi RFC822 yang benar.
sumber
JavaScript dapat mencocokkan ekspresi reguler:
Berikut ini ekspresi reguler RFC22 untuk email:
sumber
(?>
untuk berhenti mundur dan(?<angle><)…(?(angle)>)
untuk menghindari memberikan panjang lebar|
.Semua alamat email berisi simbol 'at' (yaitu @). Uji kondisi yang diperlukan:
Jangan repot-repot dengan hal yang lebih rumit. Sekalipun Anda dapat dengan sempurna menentukan apakah suatu email adalah RFC-secara sintaksis valid, itu tidak akan memberi tahu Anda apakah itu milik orang yang menyediakannya. Itu yang sangat penting.
Untuk mengujinya, kirim pesan validasi.
sumber
Validasi yang benar dari alamat email sesuai dengan RFC bukanlah sesuatu yang dapat dicapai dengan ekspresi reguler satu-liner. Artikel dengan solusi terbaik yang saya temukan di PHP adalah Apa alamat email yang valid? . Jelas, itu telah porting ke Jawa.
Saya pikir fungsinya terlalu kompleks untuk porting dan digunakan dalam JavaScript.Port JavaScript / node.js: https://www.npmjs.com/package/email-addresses .Praktik yang baik adalah memvalidasi data Anda di klien, tetapi periksa kembali validasinya di server. Dengan mengingat hal ini, Anda dapat dengan mudah memeriksa apakah suatu string terlihat seperti alamat email yang valid pada klien dan melakukan pemeriksaan ketat pada server.
Inilah fungsi JavaScript yang saya gunakan untuk memeriksa apakah string terlihat seperti alamat email yang valid:
Penjelasan:
lastAtPos < lastDotPos
: Terakhir@
harus sebelum terakhir.
karena@
tidak dapat menjadi bagian dari nama server (sejauh yang saya tahu).lastAtPos > 0
: Harus ada sesuatu (nama pengguna email) sebelum yang terakhir@
.str.indexOf('@@') == -1
: Seharusnya tidak ada@@
di alamat. Bahkan jika@
muncul sebagai karakter terakhir dalam nama pengguna email, itu harus dikutip sehingga"
akan menjadi antara itu@
dan yang terakhir@
di alamat.lastDotPos > 2
: Harus ada setidaknya tiga karakter sebelum titik terakhir, misalnya[email protected]
.(str.length - lastDotPos) > 2
: Seharusnya ada cukup karakter setelah titik terakhir untuk membentuk domain dua karakter. Saya tidak yakin apakah tanda kurung diperlukan.sumber
@
muncul sebagai karakter terakhir dalam nama pengguna email, itu harus dikutip sehingga"
akan menjadi antara itu@
dan yang terakhir@
di alamat." Bagaimana dengan"@@"@example.com
?Ini dicuri dari http://codesnippets.joyent.com/posts/show/1917
sumber
.museum
dan.travel
(karena batas 4 char setelah.
){2,4}
hanyalah indikator yang berguna daripadanya (seperti dalam "ketika Anda melihat kesalahan itu, orang lain cenderung ada"). Yang paling mendasar adalah kurangnya+
bagian lokal; kotak komentar ini terlalu kecil untuk menunjukkan semua kesalahan yang dilakukan di atas.return filter.test(email.value);
?xn--clchc0ea0b2g2a9gcd
). Masih tidak masalah?Melakukan hal ini:
Mengapa? Ini didasarkan pada RFC 2822 , yang merupakan standar SEMUA alamat email HARUS dipatuhi. Dan saya tidak yakin mengapa Anda akan repot dengan sesuatu yang "lebih sederhana" ... Anda akan menyalin dan menempelkannya;)
Seringkali ketika menyimpan alamat email dalam database saya membuatnya menjadi huruf kecil dan, dalam praktiknya, regexs biasanya dapat ditandai sebagai huruf tidak peka. Dalam kasus ini, ini sedikit lebih pendek:
Berikut adalah contoh penggunaannya dalam JavaScript (dengan tanda case case
i
in the end).Catatan :
Secara teknis beberapa email dapat menyertakan tanda kutip di bagian sebelum
@
simbol dengan karakter pelarian di dalam tanda kutip (sehingga pengguna email Anda bisa menjengkelkan dan mengandung hal-hal seperti@
dan"..."
selama itu ditulis dalam tanda kutip). TIDAK ADA YANG PERNAH ADA INI! Sudah usang. Tapi, itu termasuk dalam standar RFC 2822 yang sebenarnya , dan dihilangkan di sini.Info lebih lanjut: http://www.regular-expressions.info/email.html
sumber
/i
flag di akhir ekspresi reguler. Saya menyebutkan fakta bahwa itu harus menjadi perbandingan kasus-sensitif, tapi saya akan membuatnya lebih jelas.Saya sangat menantikan untuk menyelesaikan masalah ini. Jadi saya memodifikasi validasi reguler ekspresi email di atas
Asli
/^(([^<>()\[\]\\.,;:\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,}))$/
Diubah
/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()\.,;\s@\"]+\.{0,1})+[^<>()\.,;:\s@\"]{2,})$/
untuk memberikan contoh di Alamat Email Wikipedia .
Dan Anda dapat melihat hasilnya di sini .
sumber
[email protected]
tidak benar? Ini kasus sudut yang valid.Anda tidak boleh menggunakan ekspresi reguler untuk memvalidasi string input untuk memeriksa apakah itu email. Ini terlalu rumit dan tidak akan mencakup semua kasus.
Sekarang karena Anda hanya dapat menutupi 90% dari kasing, tulis sesuatu seperti:
Anda bisa memperbaikinya. Misalnya, 'aaa @' valid. Tapi secara keseluruhan Anda mendapatkan intinya. Dan jangan terbawa ... Solusi 90% sederhana lebih baik daripada solusi 100% yang tidak bekerja.
Dunia membutuhkan kode yang lebih sederhana ...
sumber
(.+)@(.*)
melakukan hal yang sama, dan lebih pendek.Cukup periksa apakah alamat email yang dimasukkan valid atau tidak menggunakan HTML.
Tidak perlu menulis fungsi untuk validasi.
sumber
Sulit untuk mendapatkan validator email 100% benar. Satu-satunya cara nyata untuk memperbaikinya adalah dengan mengirim email percobaan ke akun. Yang mengatakan, ada beberapa pemeriksaan dasar yang dapat membantu memastikan bahwa Anda mendapatkan sesuatu yang masuk akal.
Beberapa hal untuk ditingkatkan:
Alih-alih baru
RegExp
, cobalah menulisregexp
seperti ini:Kedua, periksa untuk memastikan bahwa suatu periode muncul setelah
@
tanda, dan pastikan bahwa ada karakter antara tanda@
dan periode.sumber
Inilah cara simpul-validator melakukannya:
sumber
Gunakan kode ini di dalam fungsi validator Anda:
Lain Anda bisa menggunakan jQuery . Aturan di dalam mendefinisikan:
sumber
abc@xyz
adalah email yang benar-benar valid yang tidak dikenali oleh regex Anda.abc@tld
juga alamat email yang valid.Pembaruan Regex 2018! coba ini
versi naskah lengkap
info lebih lanjut https://git.io/vhEfc
sumber
Solusi yang tidak memeriksa keberadaan TLD tidak lengkap.
Hampir semua jawaban untuk pertanyaan ini menyarankan menggunakan Regex untuk memvalidasi alamat email. Saya pikir Regex hanya baik untuk validasi yang belum sempurna. Tampaknya validasi pengecekan alamat email sebenarnya adalah dua masalah terpisah:
1- Validasi format email: Memastikan apakah email tersebut sesuai dengan format dan pola email di RFC 5322 dan apakah TLD benar-benar ada. Daftar semua TLD yang valid dapat ditemukan di sini .
Misalnya, meskipun alamat
[email protected]
akan melewati regex, itu bukan email yang valid, karenaccc
bukan domain tingkat atas oleh IANA.2- Memastikan email itu benar-benar ada: Untuk melakukan ini, satu-satunya pilihan adalah mengirim email kepada pengguna .
sumber
Regex untuk memvalidasi alamat email
sumber
Berikut ini adalah diskusi yang sangat baik tentang penggunaan ekspresi reguler untuk memvalidasi alamat email; " Membandingkan Alamat E-mail yang Memvalidasi Ekspresi Reguler "
Berikut adalah ekspresi teratas saat ini, yaitu JavaScript yang kompatibel, untuk tujuan referensi:
sumber
.jobs
. Selain itu, ada IDN langsung (sebagian besar, saya akui, hanya secara resmi disetujui setelah posting Anda - misalnya.中國
pada Juni 2010; tetapi sebagian besar telah bekerja selama bertahun-tahun).Ternyata, itu dia:
Diambil dari http://fightingforalostcause.net/misc/2006/compare-email-regex.php pada 1 Oktober '10.
Tetapi, tentu saja, itu mengabaikan internasionalisasi.
sumber
Berbeda dengan squirtle , ini adalah solusi yang rumit, tetapi ia melakukan pekerjaan yang sangat baik untuk memvalidasi email dengan benar:
Gunakan seperti ini:
sumber
== true
pada contoh Anda.Pengetahuan saya tentang ekspresi reguler tidak sebaik itu. Itu sebabnya saya memeriksa sintaks umum dengan ekspresi reguler sederhana terlebih dahulu dan memeriksa opsi yang lebih spesifik dengan fungsi lain sesudahnya. Ini mungkin bukan solusi teknis terbaik, tapi dengan cara ini saya lebih fleksibel dan lebih cepat.
Kesalahan paling umum yang saya temui adalah spasi (terutama di awal dan akhir) dan terkadang titik ganda.
sumber
sumber
Saya sedang mencari Regex di JS yang melewati semua kasus uji Alamat Email:
[email protected]
Email yang valid[email protected]
Email berisi titik di bidang alamat[email protected]
Email berisi titik dengan subdomain[email protected]
Tanda plus dianggap karakter yang valid[email protected]
Domain adalah alamat IP yang validemail@[192.0.2.123]
Braket persegi di sekitar alamat IP dianggap valid“email”@example.com
Kutipan di sekitar email dianggap valid[email protected]
Digit dalam alamat valid[email protected]
Tanda hubung dalam nama domain valid[email protected]
Garis bawah di bidang alamat valid[email protected]
.name
adalah nama Domain Top Level yang valid[email protected]
Dot di Top Level Domain name juga dianggap valid (menggunakanco.jp
seperti contoh di sini)[email protected]
Tanda hubung di bidang alamat validDi sini kita pergi:
http://regexr.com/3f07j
ATAU regex:
sumber
Ekspresi reguler yang disediakan oleh Microsoft dalam ASP.NET MVC adalah
Yang saya posting di sini kalau-kalau itu cacat - meskipun selalu sempurna untuk kebutuhan saya.
sumber