Regex pusty ciąg lub e-mail

127

Znalazłem wiele sprawdzania poprawności adresu e-mail Regex w SO, ale nie znalazłem żadnego, który zaakceptuje pusty ciąg. Czy jest to możliwe tylko dzięki Regex? Akceptujesz pusty ciąg znaków lub tylko e-mail? Chcę mieć to tylko na Regex.

rob waminal
źródło

Odpowiedzi:

311

Ten wzorzec wyrażenia regularnego będzie pasował do pustego ciągu:

^$

I to dopasuje (z grubsza) wiadomość e-mail lub pusty ciąg:

(^$|^.*@.*\..*$)
Dave Child
źródło
1
Coś do rozważenia, wykonanie ^ (|. * ​​@. * \ .. *) $ powinno mieć taki sam efekt, jak napisanie pustego lub tego z użyciem ^ i $ tylko raz, aby nieco uporządkować.
Runevault
1
To jest dość stare, ale właśnie się na to natknąłem i miałem problem z odpowiedzią. Istnieją przypadki, w których początek ciągu jest ukryty, ale nadal jest dopasowany ^, w których faktycznie szukasz wiadomości e-mail lub niczego w środku ciągu. Do tego (email_regex)?lepiej się nadaje.
jclancy
Upewnij się, że przeczytałeś, jak bardzo skomplikowana jest weryfikacja wiadomości e-mail, zanim spróbujesz użyć wyrażenia regularnego. stackoverflow.com/questions/201323/…
bryan kennedy
Będzie to zgodne z następującym adresem e-mail test.test@test. Myślę, że ten jest lepszy ^ $ | ^ [^ \ s @] + @ [^ \ s @] + \. [^ \ S @] + $, ponieważ będzie akceptować e-maile takie jak [email protected]
dont_trust_me
W konkretnej aplikacji Java ^$nie działa, ale ^(?!.)działa: [ ^początek ciągu, (?!)ujemne .
ostrzeżenie w przód
8

pasujący pusty ciąg lub adres e-mail

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

dopasowanie pustego ciągu znaków lub adresu e-mail, ale także dopasowanie dowolnej ilości białych znaków

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

zobacz więcej na temat samego wyrażenia regularnego dopasowywania adresu e-mail:

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

Stofke
źródło
2

Powyższe odpowiedzi działają ($ za puste), ale właśnie spróbowałem tego i działa również, aby po prostu pozostawić puste w ten sposób:

/\A(INTENSE_EMAIL_REGEX|)\z/i

To samo w odwrotnej kolejności

/\A(|INTENSE_EMAIL_REGEX)\z/i
Chemik
źródło
0

Nie dopasowuj e-maila do wyrażenia regularnego. Jest wyjątkowo brzydki, długi i skomplikowany, a parser wyrażeń regularnych prawdopodobnie i tak sobie z tym nie poradzi. Spróbuj znaleźć procedurę biblioteczną do ich dopasowania. Jeśli chcesz tylko rozwiązać praktyczny problem związany z dopasowaniem adresu e-mail (to znaczy, jeśli chcesz uzyskać zły kod, który (zwykle) działa), użyj linku regular-expressions.info przesłanego przez kogoś innego.

Jeśli chodzi o pusty ciąg, ^$jest wspominany przez wiele osób i będzie działał dobrze.

Kevin
źródło
13
W rzeczywistości brzydkie wyrażenie regularne może być obsługiwane przez parsery wyrażeń regularnych. Nie używanie wyrażenia regularnego tylko dlatego, że jest brzydkie, jest głupie.
Peter,
To nie jest konstruktywne. RegEx jest wypróbowany i przetestowany (i daleki od brzydkiego - powiedziałbyś, że jest dość elegancki, jak to działa?). Mgliste zasugerowanie biblioteki bez żadnych wskazówek dotyczących możliwego rozwiązania w ogóle mija się z celem udzielenia odpowiedzi. Każdy musi dodać zakładkę: code.tutsplus.com/tutorials/ ...
pimbrouwers
Regeksy są notorycznie trudne do odczytania, utrzymania i debugowania, co czyni je głównym kandydatem do zastąpienia przez wywołanie biblioteki.
einnocent
2
Dla przypomnienia: chętnie poleciłbym konkretną bibliotekę, gdybym wiedział, jakiego języka używa OP. Ponieważ jest to pytanie niezależne od języka, moje opcje są raczej ograniczone.
Kevin
2
Regex nie powinien być ładny. Zgodnie z tą logiką nikt nie powinien nigdy używać wyrażenia regularnego. Jeśli tak bardzo zależy ci na zastąpieniu jej przez bibliotekę, jak myślisz, co zrobi ta biblioteka? Albo będzie miał bardzo długi, skomplikowany kod, albo użyje wyrażenia regularnego ... W tym momencie równie dobrze możesz po prostu zaimplementować własną "bibliotekę". A obecnie, jeśli ktoś nie wie, jak używać wyrażeń regularnych, prawdopodobnie i tak nie powinien mieć za zadanie sprawdzania poprawności adresów e-mail ...
Andrew
0

to rozwiąże, przyjmie pusty ciąg lub dokładny identyfikator e-mail

"^$|^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"
Lijish Bhavan
źródło
2
czy mógłbyś być trochę bardziej opisowy.
Vinay Prajapati
0

Wolę /^\s+$|^$/gidopasowywać puste i puste przestrzenie.

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

ThomasReggi
źródło
3
Jeśli używasz ^ \ s * $, nie potrzebujesz znaku ani. Nie ma też potrzeby stosowania modyfikatorów g lub i, ponieważ pasuje to do całej linii i nie zawiera żadnych znaków z wielkością liter.
Cadoo
0

Jeśli używasz go w railsach - możesz ustawić aktywną walidację rekordu allow_blank: true

Tak jak:

validates :email, allow_blank: true, format: { with: EMAIL_REGEX }
Salma Gomaa
źródło