Heim >Web-Frontend >js-Tutorial >Warum verwenden erfahrene Entwickler niemals Regex für die E-Mail-Validierung?

Warum verwenden erfahrene Entwickler niemals Regex für die E-Mail-Validierung?

Susan Sarandon
Susan SarandonOriginal
2024-12-18 01:59:09976Durchsuche

Das Problem, über das niemand spricht

Seien wir ehrlich: E-Mail-Validierung klingt einfach, ist aber eine technische Falle, in die selbst erfahrene Entwickler geraten.

Was ist wirklich los?

Stellen Sie sich vor, Sie erstellen ein Anmeldeformular. Dein erster Instinkt? Werfen Sie einen regulären Ausdruck in das E-Mail-Feld. Schlechter Schachzug.

Tatsächlich gültige seltsame E-Mails

# These are ALL technically valid emails!
valid_emails = [
    '"J. R. \"Bob\" Dobbs"@example.com',
    'admin@mailserver1',
    'user+tag@gmail.com',
    'postmaster@[123.123.123.123]'
]

Die meisten Regex-Engines würden daran ersticken.

Warum?

E-Mail-Standards sind wild.

Die meisten Entwickler wären überrascht, wenn sie erfahren würden, dass es sich hierbei tatsächlich um eine technisch gültige E-Mail-Adresse gemäß RFC 5322 handelt. Die Spezifikation ermöglicht Folgendes:

  • Angegebene lokale Teile
  • Kommentare in Klammern
  • Verschachtelte Kommentare
  • Sonderzeichen in lokalen Teilen
  • Mehrere Domainbezeichnungen

Die versteckten Kosten einer schlechten Validierung

1. Verlust echter Benutzer

Ein strikter regulärer Ausdruck kann vollkommen gute E-Mail-Adressen ablehnen. Stellen Sie sich vor, Sie weisen einen potenziellen Kunden ab, weil seine E-Mail „seltsam“ aussieht, als ob:

  • Plus Adressierung (Benutzertags@gmail.com)
  • Unkonventionelle Domänenstrukturen
  • Internationale Zeichensätze
  • Legitime, aber komplexe Namenskonventionen

Ihr Produktteam wäre darüber hinaus wirklich unzufrieden; Die Verkäufe wären wirklich sauer.

2. ReDoS-Angriffe

Regex-Engines, die Backtracking verwenden, sind anfällig für Regex Denial of Service (ReDoS)-Angriffe.

def dangerous_regex_check(user_input):
    # This regex can destroy your server's performance
    evil_pattern = r'^(a+)+b$'
    return re.match(evil_pattern, user_input)

# Just 30 characters can crash your system
malicious_input = 'a' * 30 + 'b'

Angreifer können Eingaben erstellen, die Ihre Validierungsfunktion zum Stillstand bringen.

Ein intelligenterer Ansatz

Grundlegende Validierung, die tatsächlich funktioniert

def smart_email_check(email):
    """Quick and dirty email sanity check"""
    return (
        email and 
        '@' in email and 
        '.' in email.split('@')[1] and
        len(email) <= 254  # Email length limit
    )

Die wahre Lösung: Verifizierung

  1. Grundlegende Syntaxprüfung
  2. Verifizierungslink senden
  3. Lassen Sie den Benutzer beweisen, dass die E-Mail funktioniert
def validate_email(email):
    if not basic_email_check(email):
        return False

    # Send verification token
    token = generate_unique_token()
    send_verification_email(email, token)

    return True

Pro Tools für echte Entwickler

Anstatt Ihren eigenen regulären Ausdruck zu schreiben, verwenden Sie getestete Bibliotheken:

  • Python: E-Mail-Validator
  • JavaScript: validator.js
  • Java: Apache Commons Validator

Eine bessere Validierungsklasse

class EmailValidator:
    @staticmethod
    def validate(email):
        """
        Smart email validation
        - Quick syntax check
        - Verify deliverability
        """
        try:
            # Use a smart library
            validate_email(
                email, 
                check_deliverability=True
            )
            return True
        except EmailInvalidError:
            return False

Das Fazit

Bei der E-Mail-Validierung geht es nicht darum, eine unzerstörbare Festung zu errichten. Es geht um:

  • Echte Benutzer hereinlassen
  • Schützen Sie Ihr System
  • Die Dinge nicht kompliziert machen

Wichtige Erkenntnisse

  1. Vergessen Sie komplexe Regex
  2. Verwenden Sie bewährte Bibliotheken
  3. Bestätigungs-E-Mails senden
  4. Seien Sie benutzerfreundlich

Entwickler, die das richtig machen, ersparen sich unzählige Kopfschmerzen.

Soll ich einen Teil davon näher aufschlüsseln?

Übrigens arbeite ich an einem unbegrenzten Kontext-Tool, mit dem Sie Ihr bevorzugtes LLM verwenden können, ohne den Kontext immer wieder angeben zu müssen.

Schauen Sie sich das an, es ist für Entwickler völlig kostenlos.


Why experienced developers never use regex for email validation?

Das obige ist der detaillierte Inhalt vonWarum verwenden erfahrene Entwickler niemals Regex für die E-Mail-Validierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn