Heim >Web-Frontend >js-Tutorial >Warum verwenden erfahrene Entwickler niemals Regex für die E-Mail-Validierung?
Seien wir ehrlich: E-Mail-Validierung klingt einfach, ist aber eine technische Falle, in die selbst erfahrene Entwickler geraten.
Stellen Sie sich vor, Sie erstellen ein Anmeldeformular. Dein erster Instinkt? Werfen Sie einen regulären Ausdruck in das E-Mail-Feld. Schlechter Schachzug.
# 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:
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:
Ihr Produktteam wäre darüber hinaus wirklich unzufrieden; Die Verkäufe wären wirklich sauer.
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.
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 )
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
Anstatt Ihren eigenen regulären Ausdruck zu schreiben, verwenden Sie getestete Bibliotheken:
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
Bei der E-Mail-Validierung geht es nicht darum, eine unzerstörbare Festung zu errichten. Es geht um:
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.
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!