Code Smell – Ungetestete reguläre Ausdrücke
Regex ohne Tests fordert Ärger – seien Sie nicht faul. Mit KI ist es kostenlos!
TL;DR: Verwenden Sie klare und prägnante reguläre Ausdrücke und testen Sie sie gründlich.
Probleme
- Lesbarkeit
- Keine Testfälle
- Fälle fehlender Kanten
- Debugging-Herausforderungen
- Unklare Fehler
- Versteckte Mängel
Lösungen
- Bitten Sie Ihre Lieblings-KI, Testfälle zu schreiben
- Komplexe reguläre Ausdrücke in kleinere, besser lesbare Teile zerlegen.
- Überprüfen Sie Randfälle
- Ausgaben validieren
- Refaktorieren Sie den regulären Ausdruck, sobald Sie die Tests erstellt haben
- Verbessern Sie die Fehlermeldungen
Kontext
Reguläre Ausdrücke sind leistungsstark, aber knifflig.
Wenn Sie einen regulären Ausdruck ohne Tests schreiben, treten unerwartete Fehler auf.
Wenn Sie eine kryptische Regex schreiben und automatisierte Tests überspringen, könnten Ihnen wichtige Fälle entgehen, was zu Sicherheitsproblemen oder Benutzerfrustration führen könnte.
Beispielcode
Falsch
public class PasswordValidator { public static boolean isValidPassword(String password) { return password.matches( "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"); // This is a cryptic Regular Expression } }
Rechts
import java.util.ArrayList; import java.util.List; public class PasswordValidator { public static List<String> validatePassword(String password) { List<String> errors = new ArrayList<>(); if (password.length() < 8) { errors.add( "Password must be at least 8 characters long."); } if (!password.matches(".*[A-Z].*")) { errors.add( "Password must contain at least one uppercase letter."); } if (!password.matches(".*[a-z].*")) { errors.add( "Password must contain at least one lowercase letter."); } if (!password.matches(".*\d.*")) { errors.add( "Password must contain at least one digit."); } if (errors.isEmpty()) { errors.add( "Password is valid."); } return errors; // You no longer need a Regular Expression!! } } import static org.junit.Assert.*; import org.junit.Test; public class PasswordValidatorTest { // Now you have a lot of tests // You can use a Regular Expression, // a String Validator // an External Library // Whatever you want as long as it passes the tests! @Test public void testValidPassword() { List<String> result = PasswordValidator.validatePassword( "StrongPass1"); assertEquals("Password is valid.", result.get(0)); } @Test public void testTooShortPassword() { List<String> result = PasswordValidator.validatePassword( "Short1"); assertTrue(result.contains( "Password must be at least 8 characters long.")); } @Test public void testNoUppercase() { List<String> result = PasswordValidator.validatePassword( "nouppercase1"); assertTrue( result.contains( "Password must contain at least one uppercase letter.")); } @Test public void testNoLowercase() { List<String> result = PasswordValidator.validatePassword( "NOLOWERCASE1"); assertTrue(result.contains( "Password must contain at least one lowercase letter.")); } @Test public void testNoNumber() { List<String> result = PasswordValidator.validatePassword( "NoNumberPass"); assertTrue(result.contains( "Password must contain at least one digit.")); } }
Erkennung
[X] Automatisch
Sie können erkennen, wann Ihr regulärer Ausdruck aufgedeckt wird, indem Sie ihn in „fehlschlagen“ ändern und alle Ihre Tests ausführen.
Wenn Ihre Validierung ohne benutzerfreundliche Erklärungen „falsch“ zurückgibt, ist das ein klares Zeichen dafür, dass Sie sie umgestalten und das Feedback verbessern müssen.
Schlagworte
- Testen
Ebene
[X] Anfänger
KI-Generierung
KI kann reguläre Ausdrücke generieren, liefert aber oft keine hilfreichen Fehlermeldungen.
Ohne entsprechende Anweisungen können KI-generierte Validatoren Benutzer möglicherweise nicht durch die Korrektur ihrer Eingaben führen.
KI-Erkennung
KI kann grundlegende Muster regulärer Ausdrücke und fehlendes Feedback mit klaren Anweisungen erkennen.
Es werden möglicherweise nicht automatisch detaillierte Testfälle oder Beschreibungen erstellt, es sei denn, Sie werden ausdrücklich darum gebeten.
Probieren Sie sie aus!
Denken Sie daran: KI-Assistenten machen viele Fehler
Without Proper Instructions | With Specific Instructions |
---|---|
ChatGPT | ChatGPT |
Claude | Claude |
Perplexity | Perplexity |
Copilot | Copilot |
Gemini | Gemini |
Abschluss
Ein regulärer Ausdruck ohne klares Feedback ist benutzerfreundlich und fehleranfällig.
Es wäre hilfreich, wenn Sie beschreiben würden, warum sie fehlgeschlagen sind, und gründliche Tests schreiben würden, um sicherzustellen, dass Ihre Regex wie erwartet funktioniert.
Beziehungen

Code Smell 41 – Missbrauch von regulären Ausdrücken
Maxi Contieri ・ 3. Dezember 2020

Code Smell 185 – Böse reguläre Ausdrücke
Maxi Contieri ・ 8. Dez. '22

Code Smell 97 – Fehlermeldungen ohne Empathie
Maxi Contieri ・ 27. Okt. 21
Haftungsausschluss
Code Smells sind meine Meinung.
Credits
Foto von rc.xyz NFT-Galerie auf Unsplash
Feedback ist das Frühstück der Champions.
Ken Blanchard

Tolle Software-Engineering-Zitate
Maxi Contieri ・ 28. Dezember 2020
Dieser Artikel ist Teil der CodeSmell-Reihe.

So finden Sie die stinkenden Teile Ihres Codes
Maxi Contieri ・ 21. Mai '21
Das obige ist der detaillierte Inhalt vonCode Smell – Ungetestete reguläre Ausdrücke. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Fehlerbehebung und Lösungen für die Sicherheitssoftware des Unternehmens, die dazu führt, dass einige Anwendungen nicht ordnungsgemäß funktionieren. Viele Unternehmen werden Sicherheitssoftware bereitstellen, um die interne Netzwerksicherheit zu gewährleisten. ...

Lösungen zum Umwandeln von Namen in Zahlen zur Implementierung der Sortierung in vielen Anwendungsszenarien müssen Benutzer möglicherweise in Gruppen sortieren, insbesondere in einem ...

Die Verarbeitung von Feldzuordnungen im Systemdocken stößt häufig auf ein schwieriges Problem bei der Durchführung von Systemdocken: So kartieren Sie die Schnittstellenfelder des Systems und ...

Beginnen Sie den Frühling mit der Intellijideaultimate -Version ...

Bei Verwendung von MyBatis-Plus oder anderen ORM-Frameworks für Datenbankvorgänge müssen häufig Abfragebedingungen basierend auf dem Attributnamen der Entitätsklasse erstellt werden. Wenn Sie jedes Mal manuell ...

Konvertierung von Java-Objekten und -Arrays: Eingehende Diskussion der Risiken und korrekten Methoden zur Konvertierung des Guss-Typs Viele Java-Anfänger werden auf die Umwandlung eines Objekts in ein Array stoßen ...

Detaillierte Erläuterung des Designs von SKU- und SPU-Tabellen auf E-Commerce-Plattformen In diesem Artikel werden die Datenbankdesignprobleme von SKU und SPU in E-Commerce-Plattformen erörtert, insbesondere wie man mit benutzerdefinierten Verkäufen umgeht ...

Wie erkennt die Redis -Caching -Lösung die Anforderungen der Produktranking -Liste? Während des Entwicklungsprozesses müssen wir uns häufig mit den Anforderungen der Ranglisten befassen, z. B. das Anzeigen eines ...
