Maskierung von E-Mail-Adresse in java
Ich versuche, Maske E-Mail-Adresse mit "*" aber ich bin schlecht im regex.
input : nileshxyzae@gmail.com
output : nil********@gmail.com
Mein code ist
String maskedEmail = email.replaceAll("(?<=.{3}).(?=[^@]*?.@)", "*");
aber Ihre mir-Ausgang nil*******[email protected]
bin ich nicht immer was bekommen, hier falsch. Warum Letzte Zeichen nicht konvertiert?
Auch kann sich das jemand erklären also alle diese regex
Ist das deine echte E-Mail-Adresse? Wenn ja, möchten Sie vielleicht in Erwägung ziehen, es...
InformationsquelleAutor nilesh | 2015-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihren look-ahead -
(?=[^@]*?.@)
erfordert mindestens 1 Zeichen vor@
(siehe Punkt vor@
).Wenn Sie es zu entfernen, erhalten Sie alle erwarteten Symbole ersetzt:
Hier ist die regex-demo (ersetzen mit
*
).Aber der regex ist keine richtige regex für die Aufgabe. Sie brauchen einen regex zu entsprechen, wird jedes Zeichen nach den ersten 3 Zeichen bis zu der ersten
@
:Sehen eine andere regex-demo, ersetzen mit
$1*
. Hier[^@]
entspricht einem beliebigen Zeichen, das nicht@
, so dass wir nicht übereinstimmen-Adressen wie[email protected]
. Nur die E-Mails werden maskiert, 4+ - Zeichen in den Benutzernamen Teil.Sehen IDEONE demo:
(^[^@]{3}|(?!^)\G)[^@]
Oder
(^[^@]{3}|(?!^)\G)[^@](?=[^@]*@)
. Was ist interessant hier ist, dass nach dem entfernen der look-ahead-die Anzahl der Schritte, die zum abschließen der übereinstimmung erhöht.Sie müssen das Kontrollkästchen "Deaktivieren Sie die interne engine optimization" in den debugger. Nachdem Sie dies tun, Sie haben die gleiche Anzahl von Schritten für den ausgefallenen Fall und das eine ist ohne look-ahead weniger Schritte in den Erfolg Fällen. In Java gibt es keine Optimierung für den Fall mit look-ahead.
Danke für die Erinnerung über die Hinweis auf, wie Sie mit regex101 für das Debuggen von Java-regex besser 🙂 Vielleicht, eine possessive Quantifizierer verwendet werden können, zu überwinden, der Nachteil, aber ich bin damit einverstanden, es zu entfernen, ist eine gültige Art und Weise zu gehen hier.
InformationsquelleAutor Wiktor Stribiżew
Wenn Sie schlecht sind reguläre Ausdrücke, verwenden Sie Sie nicht 🙂 ich weiß nicht, ob Sie jemals gehört, das Zitat:
(Quelle)
Bekommen Sie vielleicht eine Arbeit reguläre Ausdruck hier, aber Sie verstehen es heute? morgen? in sechs Monaten Zeit? Und werden Ihre Kollegen?
Eine einfache alternative ist die Verwendung eines
StringBuilder
, und ich würde argumentieren, dass es viel mehr einfach zu verstehen was hier vor sich geht:", Beginnend beim Dritten Zeichen, ersetzen Sie die Zeichen mit einem
*
bis Sie das Ende der Zeichenfolge oder@
."Natürlich, dies funktioniert nicht ordnungsgemäß für die E-Mail-Adressen, von denen der lokale Teil ist kürzer als 3 Zeichen - es würde dann auch tatsächlich in die Maske der Domäne.
InformationsquelleAutor Andy Turner
Ihren Look-ahead ist kompliziert. Versuchen Sie, diesen code :
O/P :
\w
anstatt einfach.
? Dies führt zu "[email protected]" -> "foo*[email protected]" statt "foo****@gmail.com".Ya. Hatte nicht gedacht, dass Szenario. Verändert mein code jetzt. Dank
InformationsquelleAutor TheLostMind
Diese mag ich, weil ich mich nur verstecken wollen, 4 Charaktere, es auch dynamisch verringern Sie die versteckten chars auf 2, wenn die E-Mail-Adresse ist zu kurz:
Probe-Ausgänge:
InformationsquelleAutor user1079877