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.
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:
Dieses Regex-Muster stimmt mit einer leeren Zeichenfolge überein:
^$
Und dies entspricht (grob) einer E-Mail oder einer leeren Zeichenfolge:
(^$|^.*@.*\..*$)
^
, in denen Sie effektiv nach einer E-Mail oder nichts in der Mitte einer Zeichenfolge suchen. Dafür (email_regex)?
ist es besser geeignet.
^$
funktioniert das nicht, aber es ^(?!.)
funktioniert: [ ^
Beginn der Zeichenfolge, (?!)
negativer Lookahead, ein .
beliebiges Zeichen - ohne Zeilenvorschub]
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:
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.
Dies wird gelöst, es akzeptiert leere Zeichenfolgen oder genaue E-Mail-ID
"^$|^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"
Ich ziehe es vor /^\s+$|^$/gi
, leere und leere Räume zu finden.
console.log(" ".match(/^\s+$|^$/gi));
console.log("".match(/^\s+$|^$/gi));
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 }