Normal ifade boş dize veya e-posta


128

SO'da çok sayıda Regex e-posta doğrulaması buldum, ancak boş bir dize kabul edecek hiçbir şey bulamadım. Bu yalnızca Regex ile mümkün müdür? Boş dizeyi mi yoksa sadece e-postayı mı kabul ediyorsunuz? Bunun yalnızca Regex'te olmasını istiyorum.

Yanıtlar:


313

Bu normal ifade kalıbı boş bir dizeyle eşleşecek:

^$

Ve bu (kabaca) bir e-posta veya boş bir dizeyle eşleşecektir:

(^$|^.*@.*\..*$)

1
Dikkate alınması gereken bir şey, ^ (|. * ​​@. * \ .. *) $ yapmak, ya boş dediği gibi aynı etkiye sahip olmalı ya da bunu biraz düzeltmek için sadece ^ ve $ bir kez kullanmalı.
Runevault

1
Bu oldukça eski, ama bununla karşılaştım ve cevapla ilgili sorun yaşadım. Bir dizenin başlangıcının gizlendiği ancak yine de eşleştiği ^durumlar vardır, burada etkili bir şekilde bir e-posta ararsınız veya bir dizenin ortasında hiçbir şey aramazsınız. Bunun (email_regex)?için daha uygun.
jclancy

Bunu yapmak için RegEx'i kullanmaya çalışmadan önce e-posta doğrulamasının ne kadar karmaşık olduğunu okuduğunuzdan emin olun. stackoverflow.com/questions/201323/…
bryan kennedy

Bu, aşağıdaki test.test@test e-postasıyla eşleşecektir. Bu daha iyi sanırım ^ $ | ^ [^ \ s @] + @ [^ \ s @] + \. [^ \ S @] + $ test@test.se gibi e-postaları kabul edeceği için
dont_trust_me

Belirli bir Java uygulamasında, ^$çalışmaz, ancak çalışır ^(?!.): [ ^dize başlangıcı, (?!)negatif ilerleme, .herhangi bir karakter - satır besleme dahil değildir]
LightCC

8

boş dize veya e-posta ile eşleşen

(^$|^[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)$)

boş dize veya e-posta ile eşleşen ancak aynı zamanda herhangi bir miktarda boşlukla eşleşen

(^\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)$)

e-posta ile eşleşen normal ifadenin kendisi hakkında daha fazla bilgi edinin:

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


2

Yukarıdaki cevaplar işe yarıyor (boş için $), ama bunu biraz önce denedim ve aynı zamanda boş bırakmaya da çalışıyor:

/\A(INTENSE_EMAIL_REGEX|)\z/i

Ters sırada aynı şey

/\A(|INTENSE_EMAIL_REGEX)\z/i

0

Bir e-postayı bir normal ifadeyle eşleştirmeyin. Son derece çirkin, uzun ve karmaşık ve normal ifade ayrıştırıcınız muhtemelen yine de kaldıramaz. Bunları eşleştirmek için bir kütüphane rutini bulmaya çalışın. Yalnızca bir e-posta adresini eşleştirme pratik sorununu çözmek istiyorsanız (yani, (genellikle) işe yarayan yanlış kod istiyorsanız), başka birinin gönderdiği normal-ifadeler.info bağlantısını kullanın.

Boş dizeye gelince, ^$birden fazla kişi tarafından bahsedilir ve iyi çalışır.


13
Çirkin normal ifade, aslında normal ifade ayrıştırıcıları tarafından işlenebilir. Sırf çirkin olduğu için normal ifade kullanmamak.
Peter

Bu yapıcı değil. RegEx denendi ve test edildi (ve çirkin olmaktan uzak - nasıl çalıştığını oldukça zarif söyleyebilir misiniz?). Olası bir çözüme dair herhangi bir rehberlik olmadan bir kitaplığı muğlak bir şekilde önermek, yanıt verme amacını tamamen ortadan kaldırır. Herkesin yer işareti koyması
pimbrouwers

Normal ifadelerin okunması, sürdürülmesi ve hata ayıklanması herkesin bildiği gibi zordur, bu da onları bir kitaplığa yapılan bir çağrı ile değiştirilmeleri için birincil aday yapar.
einnocent

2
Kayıt için: OP'nin hangi dili kullandığını bilseydim, belirli bir kütüphaneyi memnuniyetle tavsiye ederim. Bu dilden bağımsız bir soru olduğu için seçeneklerim oldukça sınırlıdır.
Kevin

2
Regex'in güzel olması gerekmiyor . Bu mantıkla, hiç kimse regex kullanmamalıdır. Bir kütüphanenin onu değiştirmesi konusunda bu kadar kararlıysanız, o zaman bu kütüphanenin ne yapacağını düşünüyorsunuz? Ya çok uzun, karmaşık bir koda sahip olacak ya da normal ifadeyi kullanacak ... Bu noktaya kadar, kendi "kitaplığınızı" da uygulayabilirsiniz. Ve bugünlerde, eğer birisi normal ifadeyi nasıl kullanacağını bilmiyorsa, muhtemelen e-posta adreslerini doğrulama görevi verilmemelidir ...
Andrew

0

bu çözülecek, boş dizeyi veya tam bir e-posta kimliğini kabul edecek

"^$|^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"

2
biraz daha açıklayıcı olabilir misin?
Vinay Prajapati

0

/^\s+$|^$/giBoş ve boş alanları eşleştirmeyi tercih ederim .

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


3
^ \ S * $ kullanırsanız veya kılıfına ihtiyacınız yoktur. Ayrıca g veya i değiştiricilere gerek yoktur çünkü bu tüm satırla eşleşir ve büyük / küçük harfli herhangi bir karakter içermez.
Cadoo

0

Raylar içinde kullanıyorsanız - aktif kayıt doğrulamasını ayarlayabilirsiniz. allow_blank: true

Gibi:

validates :email, allow_blank: true, format: { with: EMAIL_REGEX }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.