Hirdetés

Keresés

Új hozzászólás Aktív témák

  • bLaCkDoGoNe

    veterán

    válasz emvy #17683 üzenetére

    Szuper, köszi. :)

    A freeCodeCamp-en a Javascript blokkot csinálom, és az egyik projekt feladat az, hogy kell írni egy telefonszám formátum ellenőrző függvényt, ami a megadott számsorozatot adott szempontok szerint validálja, és visszaköp egy boolean-t eredményül.

    Elsőre úgy gondoltam, hogy ezt regex-szel lenne a legegyszerűbb megoldani, úgy, hogy egy viszonylag komplex kifejezéssel ellenőrizném az összes szükséges szempontot, de két napja szuggerálom a megírt regex-emet, mert két teszteset elbukik rajta, és egyszerűen nem látom, hogy hol megy félre. A legvalószínűbb persze, hogy mivel most tanulom a dolgot, hülyeséget csináltam valahol, bár a regex101.com-on végigzavarva olyan nagy marhaságot elsőre nem találtam benne, lehet hogy egyszerűen valahol rosszul tagoltam valamit például, ami működik így is, csak nem a szándékaim szerint.

    A regex, amit összeraktam, így néz ki:
    /(^(1))?(\s)?((\([0-9]{3}\))*|\d{3})(\s|[-])?(\d{3})(\s|[-])?(\b\d{4})/
    és szándékaim szerint az alábbiakat ellenőrizné:
    - opcionálisan 1-essel kezdődik-e a szám
    - az egyes után opcionálisan whitespace
    - van egy három számot tartalmazó blokk zárójelek között VAGY zárójelek nélkül
    - ezt követően opcionális whitespace vagy kötőjel
    - ezt követően három számot tartalmazó blokk
    - ezt követően opcionális whitespace vagy kötőjel
    - végül egy négy számot tartalmazó blokk.

    Ez a két testcase nem az elvárt eredményt adja vissza:
    telephoneCheck("5555555555") should return true.
    telephoneCheck("555-5555") should return false.

    Tudnátok valami iránymutatást adni, hogy hol van a hiba abban, amit csináltam? Vagy eleve lehetetlen az összes teszt esetet egy regex-szel lekezelni, és egy többszintű, elágazó szűrést kellene csinálnom több kifejezéssel?

    Köszi a segítséget. :R

Új hozzászólás Aktív témák