Apa perpustakaan validasi alamat email yang baik untuk Java? Apakah ada alternatif untuk validator milik bersama ?
validation
email
apache-commons
java
jon077
sumber
sumber
Jawaban:
Apache Commons umumnya dikenal sebagai proyek yang solid. Namun perlu diingat, Anda masih harus mengirim email verifikasi ke alamat tersebut jika Anda ingin memastikan itu adalah email asli, dan bahwa pemilik ingin menggunakannya di situs Anda.
sumber
EmailValidator
kelas Apache tidak mengirim pesan email untuk verifikasi.Menggunakan paket email resmi java adalah yang termudah:
sumber
.
,.com
,com.
,abc
dan123
. Juga, menambahkan spasi putih awal atau akhir juga tidak membatalkan string. Anda menjadi hakim!Validator Apache Commons dapat digunakan seperti yang disebutkan dalam jawaban lain.
pom.xml:
build.gradle:
Impor:
Kode:
dan untuk mengizinkan alamat lokal
sumber
Jawaban terlambat, tapi saya pikir itu sederhana dan layak:
Kasus uji :
Untuk tujuan produksi, validasi Nama Domain harus dilakukan berdasarkan jaringan.
sumber
Jika Anda mencoba melakukan validasi formulir yang diterima dari klien, atau hanya validasi kacang - sederhananya. Lebih baik untuk melakukan validasi email longgar daripada melakukan yang ketat dan menolak beberapa orang, (misalnya ketika mereka mencoba mendaftar untuk layanan web Anda). Dengan hampir semua hal diizinkan di bagian nama pengguna email dan begitu banyak domain baru ditambahkan secara harfiah setiap bulan (mis., Perusahaan, .repreprise, .estate), lebih aman untuk tidak membatasi:
sumber
Terlambat untuk pertanyaan, di sini, tetapi: Saya mempertahankan kelas di alamat ini: http://lacinato.com/cm/software/emailrelated/emailaddress
Ini didasarkan pada kelas Les Hazlewood, tetapi memiliki banyak perbaikan dan perbaikan beberapa bug. Lisensi Apache.
Saya percaya ini adalah pengurai email yang paling mampu di Jawa, dan saya belum melihat satu lagi yang mampu dalam bahasa apa pun, walaupun mungkin ada satu di luar sana. Ini bukan parser gaya-lexer, tetapi menggunakan beberapa regex java yang rumit, dan dengan demikian tidak seefisien mungkin, tetapi perusahaan saya telah mem-parsing lebih dari 10 miliar alamat dunia nyata dengan itu: tentu saja dapat digunakan dalam kinerja tinggi situasi. Mungkin setahun sekali akan mengenai alamat yang menyebabkan overflow tumpukan regex (tepat), tetapi ini adalah alamat spam yang panjangnya ratusan atau ribuan karakter dengan banyak kutipan dan tanda kurung dan sejenisnya.
RFC 2822 dan spesifikasi terkait benar-benar cukup permisif dalam hal alamat email, jadi kelas seperti ini berlebihan untuk sebagian besar penggunaan. Misalnya, berikut ini adalah alamat yang sah, sesuai dengan spesifikasi, spasi, dan semua:
Tidak ada server email yang mengizinkannya, tetapi kelas ini dapat menguraikannya (dan menulis ulang ke bentuk yang dapat digunakan).
Kami menemukan opsi pengurai email Java yang ada tidak cukup tahan lama (artinya, semuanya tidak dapat menguraikan beberapa alamat yang valid), jadi kami membuat kelas ini.
Kode ini didokumentasikan dengan baik dan memiliki banyak opsi yang mudah diubah untuk mengizinkan atau melarang formulir email tertentu. Ini juga menyediakan banyak metode untuk mengakses bagian tertentu dari alamat (sisi kiri, sisi kanan, nama pribadi, komentar, dll), untuk mengurai / memvalidasi header daftar kotak surat, untuk mengurai / memvalidasi jalur pengembalian (Yang unik di antara header), dan sebagainya.
Kode yang ditulis memiliki ketergantungan javamail, tetapi mudah untuk dihapus jika Anda tidak ingin fungsi kecil yang disediakannya.
sumber
Saya hanya ingin tahu mengapa tidak ada yang muncul
@Email
dari kendala tambahan Hibernate Validator. Validator itu sendiri adalahEmailValidator
.sumber
Les Hazlewood telah menulis kelas validator email sesuai RFC 2822 yang sangat teliti menggunakan ekspresi reguler Java. Anda dapat menemukannya di http://www.leshazlewood.com/?p=23 . Namun, ketelitiannya (atau implementasi Java RE) menyebabkan inefisiensi - baca komentar tentang waktu parsing untuk alamat yang panjang.
sumber
Saya mem-porting beberapa kode di Zend_Validator_Email:
Dengan validator nama host sebagai berikut:
Dan validIDNs.xml dengan pola regex untuk tlds yang berbeda (terlalu besar untuk disertakan :)
sumber
sumber
Jika Anda ingin memverifikasi apakah alamat email itu valid, VRFY akan membantu Anda. Saya menemukan ini berguna untuk memvalidasi alamat intranet (yaitu, alamat email untuk situs internal). Namun itu kurang berguna untuk server surat internet (lihat peringatan di bagian atas halaman ini)
sumber
Meskipun ada banyak alternatif selain Apache commons, implementasinya belum sempurna (seperti implementasi Apache commons ' sendiri) dan bahkan salah dalam kasus lain.
Saya juga akan tinggal jauh dari apa yang disebut regex 'non-restriktif' sederhana; tidak ada hal seperti itu. Misalnya @ diizinkan beberapa kali tergantung pada konteks, bagaimana Anda tahu yang diperlukan ada di sana? Regex sederhana tidak akan memahaminya, meskipun email harus valid. Apa pun yang lebih kompleks menjadi rawan kesalahan atau bahkan mengandung pembunuh kinerja tersembunyi . Bagaimana Anda mempertahankan sesuatu seperti ini ?
Satu-satunya validator komprehensif berbasis regex yang sesuai dengan RFC yang saya ketahui adalah validator email-rfc2822 dengan regex 'yang disempurnakan' dengan tepat bernama Dragons.java . Ini hanya mendukung spesifikasi RFC-2822 yang lebih lama , meskipun cukup sesuai untuk kebutuhan modern ( pembaruan RFC-5322 di area yang sudah di luar ruang lingkup untuk kasus penggunaan sehari-hari).
Tapi sebenarnya yang Anda inginkan adalah lexer yang mem-parsing string dan memecahnya ke dalam struktur komponen sesuai dengan tata bahasa RFC. EmailValidator4J tampaknya menjanjikan dalam hal itu, tetapi masih muda dan terbatas.
Opsi lain yang Anda miliki adalah menggunakan layanan web seperti layanan web validasi pertarungan- mailgun atau API Mailboxlayer (hanya mengambil hasil Google pertama). Ini tidak sepenuhnya sesuai dengan RFC, tetapi berfungsi cukup baik untuk kebutuhan modern.
sumber
Apa yang ingin Anda validasi? Alamat email
Alamat email hanya dapat diperiksa untuk kesesuaian formatnya. Lihat standar: RFC2822 . Cara terbaik untuk melakukannya adalah ekspresi reguler. Anda tidak akan pernah tahu apakah benar-benar ada tanpa mengirim email.
Saya memeriksa validator milik bersama. Ini berisi kelas org.apache.commons.validator.EmailValidator. Tampaknya menjadi titik awal yang baik.
sumber
Versi Apache Commons Validator saat ini adalah 1.3.1 .
Kelas yang divalidasi adalah org.apache.commons.validator.EmailValidator. Ini memiliki impor untuk org.apache.oro.text.perl.Perl5Util yang berasal dari pensiunan proyek ORO Jakarta .
BTW, saya menemukan bahwa ada versi 1.4, di sini adalah dokumen API . Di situs itu tertulis: "Terakhir Diterbitkan: 05 Maret 2008 | Versi: 1.4-SNAPSHOT", tapi itu belum final. Satu-satunya cara untuk membangun diri sendiri (tetapi ini adalah snapshot, bukan RELEASE) dan gunakan, atau unduh dari sini . Ini berarti 1,4 belum dibuat final selama tiga tahun (2008-2011). Ini bukan gaya Apache. Saya mencari opsi yang lebih baik, tetapi tidak menemukan satu yang sangat diadopsi. Saya ingin menggunakan sesuatu yang sudah teruji dengan baik, tidak ingin menemukan bug.
sumber
Anda mungkin juga ingin memeriksa panjangnya - email memiliki panjang maksimum 254 karakter. Saya menggunakan validator apache commons dan tidak memeriksa ini.
sumber
local-part
panjang 64 dandomain
panjang 255. (Mereka mengatakan bahwa lebih lama diizinkan oleh mungkin ditolak oleh perangkat lunak lain.)Sepertinya tidak ada perpustakaan yang sempurna atau cara untuk melakukan ini sendiri, kecuali jika Anda punya waktu untuk mengirim email ke alamat email dan menunggu jawaban (ini mungkin bukan pilihan). Saya akhirnya menggunakan saran dari sini http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/ dan menyesuaikan kode sehingga akan berfungsi di Jawa.
sumber
Ini adalah metode terbaik:
Sumber: - http://howtodoinjava.com/2014/11/11/java-regex-validate-email-address/
http://www.rfc-editor.org/rfc/rfc5322.txt
sumber
Pilihan lain adalah menggunakan validator email Hibernate , menggunakan anotasi
@Email
atau menggunakan kelas validator secara terprogram, seperti:sumber
Inilah pendekatan pragmatis saya, di mana saya hanya ingin alamat domain blah @ masuk akal yang berbeda menggunakan karakter yang diizinkan dari RFC. Alamat harus dikonversi menjadi huruf kecil terlebih dahulu.
sumber