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.
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.
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 } }
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.")); } }
[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.
[X] Anfänger
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 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.
Denken Sie daran: KI-Assistenten machen viele Fehler
Without Proper Instructions | With Specific Instructions |
---|---|
ChatGPT | ChatGPT |
Claude | Claude |
Perplexity | Perplexity |
Copilot | Copilot |
Gemini | Gemini |
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.
Code Smells sind meine Meinung.
Foto von rc.xyz NFT-Galerie auf Unsplash
Feedback ist das Frühstück der Champions.
Ken Blanchard
Dieser Artikel ist Teil der CodeSmell-Reihe.
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!