Regex - kody pocztowe

0

@lion137: co najmniej jedna cyfra w całym wzorcu. Czyli np 1_-___ jest ok

Jeśli tak, to ja już się nie produkuję :), rozwiązanie @TomRiddle załatwia sprawę, testy do @szydlak Ciebie:
https://regex101.com/r/uzqizP/3

0

Bo robię cennik i jest inny w zależności od kodu pocztowego. Ale nie podaje konkretnego kodu tylko jakby wzór. Czyli np ustalam cene dla kodów pocztowych ze wzorcem: 4_-___. Więc będzie obowiązywał wszystkie kody pocztowe zaczynające się od 4. - szydlak 7 minut temu

Ponieważ taki cennik ma modyfikować (chyba 1) ) zwykły człowiek, a nie programista, użyłbym czegoś znanego (power) userom, np maski jak do listowania plików albo like w SQL
W kodzie "silnika" zrobić swoje

1) chyba że są programiści lubiący klepać cenniki?

0
AnyKtokolwiek napisał(a):

Bo robię cennik i jest inny w zależności od kodu pocztowego. Ale nie podaje konkretnego kodu tylko jakby wzór. Czyli np ustalam cene dla kodów pocztowych ze wzorcem: 4_-___. Więc będzie obowiązywał wszystkie kody pocztowe zaczynające się od 4. - szydlak 7 minut temu

Ponieważ taki cennik ma modyfikować (chyba 1) ) zwykły człowiek, a nie programista, użyłbym czegoś znanego (power) userom, np maski jak do listowania plików albo like w SQL
W kodzie "silnika" zrobić swoje

1) chyba że są programiści lubiący klepać cenniki?

Czyli tak na prawdę chcesz zrobić parser maski kodu pocztowego? To skoro tak, to moim zdaniem maska __-___ też powinna być poprawna składniowo. Dopiero w późniejszej części aplikacji móglbyś decydować czy chcesz pozwolić na maski które dopuszczają wszystkie/ustawiać ich restrykcyjność. I jesli tak, to regexp ^[_\d]{2}-[_\d]{3}$ wystarczy :)

0

Troche offtop, istnieje na rynku cos bardziej ludzkiego spełniajacego założenia regexa?

0

Nie, nie istnieje, w tym segmencie rynku regex rzondzi :-D

0
lion137 napisał(a):

Nie, nie istnieje, w tym segmencie rynku regex rzondzi :-D

no nie, zwykła pętelka po charach ;) I to nawet nie w lambdach napisana

(o kurcze, zaraz mnie zawieszą w prawach członka Pi ^H^H^H... 4p )

0
TomRiddle napisał(a):
AnyKtokolwiek napisał(a):

Bo robię cennik i jest inny w zależności od kodu pocztowego. Ale nie podaje konkretnego kodu tylko jakby wzór. Czyli np ustalam cene dla kodów pocztowych ze wzorcem: 4_-___. Więc będzie obowiązywał wszystkie kody pocztowe zaczynające się od 4. - szydlak 7 minut temu

Ponieważ taki cennik ma modyfikować (chyba 1) ) zwykły człowiek, a nie programista, użyłbym czegoś znanego (power) userom, np maski jak do listowania plików albo like w SQL
W kodzie "silnika" zrobić swoje

1) chyba że są programiści lubiący klepać cenniki?

Czyli tak na prawdę chcesz zrobić parser maski kodu pocztowego? To skoro tak, to moim zdaniem maska __-___ też powinna być poprawna składniowo. Dopiero w późniejszej części aplikacji móglbyś decydować czy chcesz pozwolić na maski które dopuszczają wszystkie/ustawiać ich restrykcyjność. I jesli tak, to regexp ^[_\d]{2}-[_\d]{3}$ wystarczy :)

Tak na prawdę to robię cennik. O osoba wysyła z frontu np takie coś

3_-___

oraz wartość kwoty. Ten regex służy mi tylko do tego, że zweryfikować czy poprawne dane są wysyłane z frontu i zapisane w bazie. Żeby np nikt nie mógł wysłać 3a-___. Cennik będzie zrobiony raz i tyle. Następnie w systemie robie zamówienie z miejscem odbioru (miejsce odbioru zawiera pełne dane adresowe z kodem pocztowym) Gdy tworze to zamówienie to z cennika pobieram wartość w zależności do czego pasuje kod pocztowy.
Stwierdziłem, że lepiej regexem weryfikować ten dane niż pisać jakieś szpagaty z ifami i pętlami po charach. I jak się okazuje ten regex jest bardzo, krótki i załatwia sprawę.

1
Escanor16 napisał(a):

Troche offtop, istnieje na rynku cos bardziej ludzkiego spełniajacego założenia regexa?

Można próbować klepać własny parser, ale parsery nie są przenośnie między językami. Np Haskell ma bardzo prosty i przyjemny AttoParsec, w którym próbowałem coś napisać, ale czy to jest lepsze niż RegExp to nie wiem

1
KamilAdam napisał(a):
Escanor16 napisał(a):

Troche offtop, istnieje na rynku cos bardziej ludzkiego spełniajacego założenia regexa?

Można próbować klepać własny parser, ale parsery nie są przenośnie między językami. Np Haskell ma bardzo prosty i przyjemny AttoParsec, w którym próbowałem coś napisać, ale czy to jest lepsze niż RegExp to nie wiem

To co napisałes to też jest wyrażenie regularne. To co klepie autor postu to też jest wyrażenie regularne. 3_-___. Rządzą się tymi samymi prawami, mają takie same wady i zalety, i wszystkie dostają input jako bezmózgi string. Więc do stringów które mają strukture, jak np JSON, HTML, etc. oczywiście używanie bezmózgich stringów się NIE NADAJE.

To co ludzie najcześciej mają na myśli mówiąc "regexp" albo "wyrażenie regularne", mają na myśli "wyrażenia regularne compatybilne z PCRE" (albo Perl-Compatible Regular Expression); co nie zmienia faktu że nawet *-*-*, to jest wyrażenie regularne.

1

Ja się zawsze zastanawiam dlaczego nie ma jakiegoś popularnego odpowiednika regexa z lepszym API typu

text
.NumberOfLength(3)
.Or()
.NumberOfLength(2)
.Then("-")
.NumberOfLength(3)
.Then("-")
.StringOfLength(3).MadeOf("ABC123")
.Matches()?

123-456-ABC

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0