253 usomaji

Kurekebisha 025 - Kutenganisha Semi za Kawaida

kwa Maximiliano Contieri5m2025/03/31
Read on Terminal Reader

Ndefu sana; Kusoma

Unaweza kuvunja regex ngumu ya kuthibitisha katika sehemu ndogo ili kujaribu kila sehemu moja kwa moja na taarifa makosa sahihi.
featured image - Kurekebisha 025 - Kutenganisha Semi za Kawaida
Maximiliano Contieri HackerNoon profile picture
0-item

Fanya Semi za Kawaida ziweze Kujaribiwa na Kueleweka

TL;DR: Unaweza kugawanya regex changamano ya uthibitishaji katika sehemu ndogo ili kujaribu kila sehemu kibinafsi na kuripoti makosa sahihi.

Matatizo Yameshughulikiwa 😔

Misimbo Husika Harufu 💨

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxv

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxvii

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xx-we-have-reached-100

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-ix-7rr33ol

Hatua 👣

  1. Chambua regex ili kutambua vipengele vyake vya kimantiki.
  2. Vunja regex kuwa vidogo vidogo, vilivyopewa vielelezo vidogo kwa kila sehemu.
  3. Andika majaribio ya kitengo kwa kila muundo mdogo ili kuhakikisha kuwa inafanya kazi kwa usahihi.
  4. Changanya miundo midogo iliyojaribiwa kwenye mantiki kamili ya uthibitishaji.
  5. Rekebisha msimbo ili kutoa ujumbe wazi wa makosa kwa kila sehemu inayoshindwa.

Sampuli ya Msimbo 💻

Kabla 🚨

 function validateURL(url) { const urlRegex = /^(https?:\/\/)([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})(\/.*)?$/; // Criptic and untesteable return urlRegex.test(url); }

Baada ya 👉

 // Step 1: Define individual regex components const protocolPattern = /^(https?:\/\/)/; const domainPattern = /^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; const pathPattern = /^\/.*$/; // Step 2: Write unit tests for each component describe("Protocol Validation", () => { test("should pass for http://", () => { expect(protocolPattern.test("http://")).toBe(true); }); test("should pass for https://", () => { expect(protocolPattern.test("https://")).toBe(true); }); test("should fail for invalid protocols", () => { expect(protocolPattern.test("ftp://")).toBe(false); }); }); describe("Domain Validation", () => { test("should pass for valid domains", () => { expect(domainPattern.test("example.com")).toBe(true); expect(domainPattern.test("sub.domain.org")).toBe(true); }); test("should fail for invalid domains", () => { expect(domainPattern.test("example")).toBe(false); expect(domainPattern.test("domain..com")).toBe(false); }); }); describe("Path Validation", () => { test("should pass for valid paths", () => { expect(pathPattern.test("/path/to/resource")).toBe(true); expect(pathPattern.test("/")).toBe(true); }); test("should fail for invalid paths", () => { expect(pathPattern.test("path/to/resource")).toBe(false); expect(pathPattern.test("")).toBe(false); }); }); // Step 3: Validate each part and report errors function validateURL(url) { if (!protocolPattern.test(url)) { throw new Error("Invalid protocol. Use http:// or https://."); } const domainStartIndex = url.indexOf("://") + 3; const domainEndIndex = url.indexOf("/", domainStartIndex); const domain = domainEndIndex === -1 ? url.slice(domainStartIndex) : url.slice(domainStartIndex, domainEndIndex); if (!domainPattern.test(domain)) { throw new Error("Invalid domain name."); } const path = url.slice(domainEndIndex); if (path && !pathPattern.test(path)) { throw new Error("Invalid path."); } return true; } // Step 4: Add integration tests for the full URL validation describe("Full URL Validation", () => { test("should pass for valid URLs", () => { expect(validateURL("https://lesluthiers.com/tour/")).toBe(true); expect(validateURL("https://bio.lesluthiers.org/")).toBe(true); }); test("should fail for invalid URLs", () => { expect(() => validateURL("ftp://mastropiero.com")). toThrow("Invalid protocol"); expect(() => validateURL("http://estherpsicore..com")). toThrow("Invalid domain name"); expect(() => validateURL("http://book.warren-sanchez")). toThrow("Invalid path"); }); });

Andika 📝

  • [x] Semi-Otomatiki

Usalama 🛡️

Urekebishaji huu ni salama ikiwa utafuata hatua kwa uangalifu.

Kujaribu kila sehemu huhakikisha kwamba unapata makosa mapema.

Kwa nini Kanuni ni Bora? ✨

Nambari iliyorekebishwa ni bora zaidi kwa sababu inaboresha usomaji, udumishaji na uwezo wa majaribio.

Kuvunja regex katika sehemu ndogo hufanya kuelewa ni nini kila sehemu hufanya rahisi.

Unaweza pia kuripoti hitilafu mahususi uthibitishaji unaposhindwa, ambayo huwasaidia watumiaji kurekebisha maingizo yao.

Hii pia ni fursa nzuri ya kutumia mbinu ya Ukuzaji Inayoendeshwa na Mtihani , na kuongeza hatua kwa hatua utata kwa kuanzisha sehemu ndogo mpya.

Je, Inaboreshaje Mabishano? 🗺️

Kwa kugawanya regex katika vipengele vidogo, vya maana, unaunda ramani ya karibu kati ya mahitaji ya Ulimwengu Halisi (km, "URL lazima iwe na itifaki halali") na msimbo.

Hii inapunguza utata na kuhakikisha kwamba msimbo unaonyesha kikoa cha tatizo kwa usahihi.

Mapungufu ⚠️

Njia hii inaweza kuongeza sehemu za juu kwa mifumo rahisi sana ya regex ambapo kuivunja itakuwa sio lazima.

Refactor na AI 🤖

Unaweza kutumia zana za AI kusaidia kutambua vifaa vya regex.

Uliza AI ieleze ni nini kila sehemu ya regex hufanya, kisha ikuongoze katika kuivunja katika vipande vidogo, vinavyoweza kujaribiwa. Kwa mfano, unaweza kuuliza, "Regex hii inafanya nini?" na kufuata, "Ninawezaje kuigawanya katika sehemu ndogo?".

Ni 2025, Hakuna mtayarishaji programu anayepaswa kuandika Maneno mapya ya Kawaida tena.

Unapaswa kuacha kazi hii ya mitambo kwa AI.

Ushauri Unaopendekezwa: 1. Changanua regex ili kutambua vipengele vyake vya kimantiki.2. Vunja regex kuwa ndogo, iliyopewa vielelezo vidogo kwa kila sehemu.3. Andika vipimo vya kitengo kwa kila muundo mdogo ili kuhakikisha kuwa unafanya kazi ipasavyo.4. Changanya miundo midogo iliyojaribiwa katika mantiki kamili ya uthibitishaji.5. Rekebisha msimbo ili kutoa ujumbe wazi wa makosa kwa kila sehemu inayoshindwa.

Bila Maelekezo Sahihi

Pamoja na Maagizo Maalum

GumzoGPT

GumzoGPT

Claude

Claude

Kuchanganyikiwa

Kuchanganyikiwa

Copilot

Copilot

Gemini

Gemini

DeepSeek

DeepSeek

Meta AI

Meta AI

Qwen

Qwen

Lebo 🏷️

  • Uthibitisho

Kiwango 🔋

  • [x] Kati

Refactorings Husika 🔄

Tazama pia 📚

Mikopo 🙏

Picha na Gerd Altmann kwenye Pixabay


Nakala hii ni sehemu ya Msururu wa Kurekebisha.


Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks