Regex string atau email kosong

127

Saya menemukan banyak validasi email Regex di SO tetapi saya tidak menemukan yang akan menerima string kosong. Apakah ini hanya bisa dilakukan melalui Regex? Hanya menerima string kosong atau email? Saya ingin memiliki ini di Regex saja.

merampok waminal
sumber

Jawaban:

311

Pola regex ini akan cocok dengan string kosong:

^$

Dan ini akan cocok dengan (secara kasar) email atau string kosong:

(^$|^.*@.*\..*$)
Dave Child
sumber
1
Sesuatu yang perlu dipertimbangkan, melakukan ^ (|. * ​​@. * \ .. *) $ harus memiliki efek yang sama seperti yang dikatakan kosong atau ini dengan hanya menggunakan ^ dan $ sekali, untuk merapikannya sedikit.
Runevault
1
Ini cukup tua, tetapi saya hanya menemukan ini dan mengalami kesulitan dengan jawabannya. Ada kasus di mana awal string disembunyikan tetapi masih cocok dengan ^, di mana secara efektif Anda mencari email atau tidak sama sekali di tengah-tengah string. Untuk ini (email_regex)?lebih cocok.
jclancy
Pastikan Anda membaca tentang betapa rumitnya validasi email, sebelum mencoba menggunakan RegEx untuk melakukannya. stackoverflow.com/questions/201323/…
bryan kennedy
Ini akan cocok dengan email test.test@test berikut. Yang ini lebih baik, saya rasa ^ $ | ^ [^ \ s @] + @ [^ \ s @] + \. [^ \ S @] + $ karena akan menerima email seperti [email protected]
dont_trust_me
Dalam aplikasi Java tertentu, ^$itu tidak berfungsi, tetapi ^(?!.)tidak: [ ^mulai string, (?!)lookahead negatif, .karakter apa pun - tidak termasuk linefeed]
LightCC
8

cocok dengan string atau email kosong

(^$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)

mencocokkan string kosong atau email tetapi juga mencocokkan jumlah spasi kosong

(^\s*$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)

lihat lebih lanjut tentang regex yang cocok dengan email itu sendiri:

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

Stofke
sumber
2

Jawaban di atas berfungsi ($ untuk kosong), tetapi saya baru saja mencoba ini dan itu juga berfungsi untuk membiarkannya kosong seperti:

/\A(INTENSE_EMAIL_REGEX|)\z/i

Hal yang sama dalam urutan terbalik

/\A(|INTENSE_EMAIL_REGEX)\z/i
Ahli kimia
sumber
0

Jangan mencocokkan email dengan regex. Ini sangat jelek dan panjang dan rumit dan parser regex Anda mungkin tidak bisa mengatasinya. Cobalah untuk menemukan rutin perpustakaan untuk mencocokkannya. Jika Anda hanya ingin menyelesaikan masalah praktis pencocokan alamat email (yaitu, jika Anda ingin kode yang salah yang terjadi pada (biasanya) berfungsi), gunakan tautan regular-expressions.info yang dikirimkan oleh orang lain.

Adapun string kosong, ^$disebutkan oleh banyak orang dan akan berfungsi dengan baik.

Kevin
sumber
13
Regex yang jelek sebenarnya bisa ditangani oleh parser regex. Tidak menggunakan regex hanya karena jelek itu konyol.
Peter
Ini tidak konstruktif. RegEx sudah dicoba dan diuji (dan jauh dari jelek - akankah Anda mengatakan itu cukup elegan cara kerjanya?). Secara samar menyarankan perpustakaan tanpa panduan tentang solusi yang mungkin mengalahkan tujuan menanggapi sama sekali. Semua orang perlu membookmark: code.tutsplus.com/tutorials/…
pimbrouwers
Regex terkenal sulit untuk dibaca, dipelihara, dan di-debug, yang menjadikannya kandidat utama untuk penggantian melalui panggilan ke perpustakaan.
einnocent
2
Sebagai catatan: Saya dengan senang hati akan merekomendasikan perpustakaan tertentu jika saya tahu bahasa apa yang digunakan OP. Karena ini adalah pertanyaan agnostik bahasa, pilihan saya agak terbatas.
Kevin
2
Regex seharusnya tidak cantik. Dengan logika itu, tidak seorang pun boleh menggunakan regex. Jika Anda begitu bersikeras tentang perpustakaan yang akan menggantinya, lalu menurut Anda apa yang akan dilakukan perpustakaan itu? Entah itu akan memiliki kode yang sangat panjang, rumit, atau akan menggunakan regex ... Pada titik itu Anda mungkin juga cukup menerapkan "perpustakaan" Anda sendiri. Dan saat ini, jika seseorang tidak tahu cara menggunakan regex, mereka mungkin tidak seharusnya ditugaskan untuk memvalidasi alamat email ...
Andrew
0

ini akan menyelesaikan, itu akan menerima string kosong atau membalas id email

"^$|^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"
Lijish Bhavan
sumber
2
dapatkah Anda sedikit lebih deskriptif.
Vinay Prajapati
0

Saya lebih suka /^\s+$|^$/gimencocokkan ruang kosong dan kosong.

console.log("  ".match(/^\s+$|^$/gi));
console.log("".match(/^\s+$|^$/gi));

ThomasReggi
sumber
3
Jika Anda menggunakan ^ \ s * $ Anda tidak perlu atau kasing. Juga tidak perlu untuk pengubah g atau i karena ini cocok dengan seluruh baris dan tidak melibatkan karakter dengan case.
Cadoo
0

Jika Anda menggunakannya di dalam rel - validasi activerec Anda dapat mengatur allow_blank: true

Sebagai:

validates :email, allow_blank: true, format: { with: EMAIL_REGEX }
Salma Gomaa
sumber