• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Regex wyrażenia regularne

Object Storage Arubacloud
0 głosów
304 wizyt
pytanie zadane 5 listopada 2018 w Inne języki przez netninja3 Nowicjusz (120 p.)

Mam do napisania regex który sprawdzi czy dana wejściowa jest 6 cyfrowym PIN'em, który może zawierać tylko jedno 0, reszta cyfr dowolna. Mam coś takiego, rozumiem błędy tego lecz nie wiem jak zmienić na poprawną wersje.

^\[0-9]{0,1}\[1-9]{5,6}$

 

2 odpowiedzi

+1 głos
odpowiedź 5 listopada 2018 przez Tomek Sochacki Ekspert (227,510 p.)

Tak na szybko można by np. coś takiego:

const reg = /^(?!.*0.*0)\d{6}$/;

reg.test('123456');  //true
reg.test('1234567'); //false
reg.test('12345');   //false
reg.test('023456');  //true
reg.test('103456');  //true
reg.test('003456');  //false
reg.test('023450');  //false

Sprawdzenie nie jest może super optymalne ale wyraźnie wskazuje warunki zadania, czyli najpierw sprawdzamy, czy w ciągu nie znajdują się czasem co najmniej dwa zera, a następnie określamy, że cały ciąg ma się składać dokłądnie z sześciu cyfr.

Przykład z testowanie w JavaScript ale regexp można zastosować praktycznie wszędzie.

Zastosowanie "(?! ... )" jest tutaj ważne, ponieważ napisałeś:

który może zawierać tylko jedno 0, reszta cyfr dowolna

czyli rozumiem z tego, że PIN może zawierać maksymalnie jedno zero, ale może ono być na dowolnej pozycji - nie napisałeś, że jeśli wystąpi to ma być pierwsze lub ostatnie. To bardzo istotne założenie, jeśli jest inaczej to musisz sprecyzować warunki zadania.

+1 głos
odpowiedź 5 listopada 2018 przez RafalS VIP (122,820 p.)

Czasem regexy to overkill, jesli chodzi o sama funkcjonalnosc to ja bym predzej pokusil sie o taka funkcyjke ktora jest o wiele czytelniejsza od regexa:

def isPinValid(pin: str):
    return len(pin) == 6 and pin.count('0') <= 1 and pin.isdigit()

Podobne pytania

0 głosów
1 odpowiedź 396 wizyt
pytanie zadane 31 października 2016 w Systemy operacyjne, programy przez Patryk Bieganski Nowicjusz (180 p.)
0 głosów
1 odpowiedź 365 wizyt
pytanie zadane 20 października 2016 w C# przez Rout Bywalec (2,350 p.)
0 głosów
0 odpowiedzi 336 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...