Regex leere Zeichenfolge oder E-Mail


127

Ich habe viele Regex-E-Mail-Überprüfungen in SO gefunden, aber keine gefunden, die eine leere Zeichenfolge akzeptieren. Ist dies nur über Regex möglich? Nur leere Zeichenfolge oder nur E-Mail akzeptieren? Ich möchte dies nur auf Regex haben.

Antworten:


311

Dieses Regex-Muster stimmt mit einer leeren Zeichenfolge überein:

^$

Und dies entspricht (grob) einer E-Mail oder einer leeren Zeichenfolge:

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

1
Etwas zu beachten, ^ (|. * ​​@. * \ .. *) $ zu tun, sollte den gleichen Effekt haben, wie es entweder leer oder dies sagt, wenn nur ^ und $ einmal verwendet werden, um es ein wenig aufzuräumen.
Runevault

1
Das ist ziemlich alt, aber ich bin nur darauf gestoßen und hatte Probleme mit der Antwort. Es gibt Fälle, in denen der Anfang einer Zeichenfolge ausgeblendet ist, aber immer noch mit übereinstimmt ^, in denen Sie effektiv nach einer E-Mail oder nichts in der Mitte einer Zeichenfolge suchen. Dafür (email_regex)?ist es besser geeignet.
Jclancy

Informieren Sie sich darüber, wie kompliziert die E-Mail-Validierung ist, bevor Sie versuchen, RegEx zu verwenden. stackoverflow.com/questions/201323/…
Bryan Kennedy

Dies entspricht der folgenden E-Mail test.test@test. Dieser ist besser, denke ich ^ $ | ^ [^ \ s @] + @ [^ \ s @] + \. [^ \ S @] + $, da er E-Mails wie test@test.se
dont_trust_me

In einer bestimmten Java-Anwendung ^$funktioniert das nicht, aber es ^(?!.)funktioniert: [ ^Beginn der Zeichenfolge, (?!)negativer Lookahead, ein .beliebiges Zeichen - ohne Zeilenvorschub]
LightCC

8

passende leere Zeichenfolge oder 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)$)

Übereinstimmung mit einer leeren Zeichenfolge oder E-Mail, aber auch mit einer beliebigen Anzahl von Leerzeichen

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

Weitere Informationen zum E-Mail-Matching-Regex selbst:

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


2

Die obigen Antworten funktionieren ($ für leer), aber ich habe es gerade versucht und es funktioniert auch, wenn man einfach so leer lässt:

/\A(INTENSE_EMAIL_REGEX|)\z/i

Gleiches in umgekehrter Reihenfolge

/\A(|INTENSE_EMAIL_REGEX)\z/i

0

Ordnen Sie eine E-Mail keinem regulären Ausdruck zu. Es ist extrem hässlich und lang und kompliziert und Ihr Regex-Parser kann wahrscheinlich sowieso nicht damit umgehen. Versuchen Sie, eine Bibliotheksroutine zu finden, um sie abzugleichen. Wenn Sie nur das Praktische lösen wollen Problem des Abgleichs einer E-Mail-Adresse möchten (dh wenn Sie einen falschen Code wünschen, der (normalerweise) funktioniert), verwenden Sie den Link "regulär-ausdrücke.info", den eine andere Person gesendet hat.

Was die leere Zeichenfolge betrifft, ^$wird sie von mehreren Personen erwähnt und funktioniert einwandfrei.


13
Hässlicher Regex kann tatsächlich von Regex-Parsern verarbeitet werden. Es ist dumm, keinen regulären Ausdruck zu verwenden, nur weil er hässlich ist.
Peter

Das ist nicht konstruktiv. RegEx hat sich bewährt (und ist alles andere als hässlich - würden Sie sagen, es ist ziemlich elegant, wie es funktioniert?). Eine Bibliothek vage ohne Anleitung zu einer möglichen Lösung vorzuschlagen, hat den Zweck, überhaupt zu antworten, zunichte gemacht. Jeder muss ein Lesezeichen setzen: code.tutsplus.com/tutorials/…
pimbrouwers

Regexes sind bekanntermaßen schwer zu lesen, zu warten und zu debuggen, was sie zu einem Hauptkandidaten für den Ersatz durch einen Aufruf einer Bibliothek macht.
Unschuldig

2
Für die Aufzeichnung: Ich würde gerne eine bestimmte Bibliothek empfehlen, wenn ich wüsste, welche Sprache OP verwendet. Da dies eine sprachunabhängige Frage ist, sind meine Möglichkeiten eher begrenzt.
Kevin

2
Regex soll nicht hübsch sein. Nach dieser Logik sollte niemand Regex verwenden. Wenn Sie so unerbittlich sind, dass eine Bibliothek diese ersetzt, was wird diese Bibliothek dann Ihrer Meinung nach tun? Entweder wird es sehr langen, komplizierten Code geben, oder es wird Regex verwenden ... Bis dahin können Sie genauso gut Ihre eigene "Bibliothek" implementieren. Und heutzutage, wenn jemand nicht weiß, wie man Regex verwendet, sollte er wahrscheinlich sowieso nicht damit beauftragt werden, E-Mail-Adressen zu validieren ...
Andrew

0

Dies wird gelöst, es akzeptiert leere Zeichenfolgen oder genaue E-Mail-ID

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

2
Könnten Sie etwas beschreibender sein.
Vinay Prajapati

0

Ich ziehe es vor /^\s+$|^$/gi, leere und leere Räume zu finden.

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


3
Wenn Sie ^ \ s * $ verwenden, benötigen Sie den Fall oder nicht. Es sind auch keine g- oder i-Modifikatoren erforderlich, da dies mit der gesamten Zeile übereinstimmt und keine Zeichen mit Groß- / Kleinschreibung enthält.
Cadoo

0

Wenn Sie es in Schienen verwenden, können Sie die Aktivierungsaufzeichnungsvalidierung festlegen allow_blank: true

Wie:

validates :email, allow_blank: true, format: { with: EMAIL_REGEX }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.