RegEx - wyrażenie regularne

RegEx - wyrażenie regularne
SC
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 7 lat
  • Postów:7
0

Witam,

Mam problem. Mianowicie potrzebuję wyrażenie regularnego, które za pomocą replace do dowolnego ciągu cyfr doklei .00 np.:
1 -> 1.00
12 -> 12.00
itd.

przy czym jeśli sam wcisnę kropkę lub przecinek, to będę wpisywał częśc dziesiętną, czyli nie spowoduje to sytuacji, że
12.45 -> 12.45.00

lion137
To ma byc z konsoli?
Kandif
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:231
0

Możesz dopisywać tylko w przypadku gdy wartość jest całkowita np. if((liczba-parseInt(liczba))>0) . W internecie pewnie są lepsze sposoby, ten wymyśliłem na szybko.


"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'
Patryk27
12.00 - parseInt(12.00) = 0
Silv
Moderator Wiki
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa
1

A czy masz jakiś kod już? Jeśli nie, tu jest wskazówka, jak zacząć: napisz najpierw wyrażenie regularne, które dopasuje część przed kropką, następnie napisz takie, które dopasuje kropkę. Tu możesz testować: https://www.debuggex.com/, jest na tej stronie także kompletna ściągawka dla wyrażeń regularnych w Javascripcie.


edytowany 3x, ostatnio: Silv
KR
  • Rejestracja:prawie 16 lat
  • Ostatnio:6 miesięcy
  • Postów:2514
0

"2.53".replace(/(^[^.]*).*$/, "$1.00") => 2.00, ale możesz zrobić też tak: x = 2.3; (Math.round(parseFloat(x) * 100) / 100).toFixed(2); => 2.30.
Ciężko powiedzieć co masz na myśli bo nie sprecyzowałeś co ma się stać dla np. "2.3"


░█░█░█░█░█░█░█░█░█░█░█░
edytowany 5x, ostatnio: krwq
SC
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 7 lat
  • Postów:7
0

Ogólnie chodzi mi o to, że

  • jak będę wpisywał liczbę np. 1, 2, 45, to będzie się doklejać .00
  • jak wpiszę 1.1 to musi się zrobić 1.10
  • a jak wcisnę kropkę w trakcie wpisywania, to będe wpisywał częśc dziesiętną, ale już wtedy nie doklei .00
Silv
Moderator Wiki
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa
0

A rozwiązanie @krwq jest złe?


KR
  • Rejestracja:prawie 16 lat
  • Ostatnio:6 miesięcy
  • Postów:2514
0

@SimpleCoder jak nie musi być regex, to użyj drugiego kodu z mojej poprzedniej odpowiedzi. Na jednego regexa nie jestem pewien czy się da, w każdym razie póki co nie mam pomysłu jak (i też mi się nie chce wymyślać), na 3 regexy możesz np. tak:

  1. obcina miejsca dziesiętne
  2. dopisuje jedno zero w przypadkach (XX.X)
  3. dopisuje dwa zera i kropke (dla liczb całkowitych)

czemu musi być koniecznie regex?


░█░█░█░█░█░█░█░█░█░█░█░
edytowany 2x, ostatnio: krwq
GA
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:3
0

Ja to kiedyś tak zrobiłem:

Kopiuj
var a = a+0.00000001;
var b = (a).toFixed(2);

I przy pomocy

Kopiuj
replace(",", ".")

zmieniasz przecinek na kropkę.
U mnie działało dobrze, ale nie jestem dobry z Js i nie wiem czy to poprawne.

edytowany 2x, ostatnio: Gapi
Silv
Mnie to wygląda na większe obejście niż rozwiązanie (abstrahując, czy tak się da w JS), ale w JS wiele jest obejść, więc ostatecznie nie musi to robić różnicy, zależy jaką się przyjmie filozofię kodzenia.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.