![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 13.06.2017 Ostrzeżenie: (0%) ![]() ![]() |
Witam, dziękuje za zainteresowaniem tematem.
próbuje znaleść odpowiedźm, jak powinno wyglądać wyrażenie regularne do walidacji cyfry dziesiętnej, uwzględniające: - tylko cyfry; - przecinek, kropkę; - nie mogące zarazem 0.00 lub 0,00 Bardzo będę wdzięczny za pomoc. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 879 Pomógł: 230 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) ![]() ![]() |
https://regex101.com/r/53nzyz/1
Może trochę pomoże acz więcej niż \d{1}[.,]\d{2} nie zrobię, bo nie wiem jak wykluczyć Ci 0[.,]00 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 13.06.2017 Ostrzeżenie: (0%) ![]() ![]() |
@Tomplus: dziękuje za sugestie.
czy ktoś może coś jeszcze dodać? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Kod (?!(0){1,}.0{1,})\d+(\.|,)\d+
-------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Sprawdź czy liczba ma odpowiedni format, potem zamień ewentualny przecinek na kropkę i sprawdź czy wynikowa liczba jest różna od zera. Nie sprawdzaj wartości liczby wyrażeniem regularnym.
Kod (?!(0){1,}.0{1,})\d+(\.|,)\d+ Śmiesznie formatujesz wzorzec. Można prościej zrobić to samo: Kod (?!0+.0+)\d+[.,]\d+
Ten post edytował SmokAnalog 16.12.2017, 19:37:20 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
W moim, a co za tym idzie Twoim, jest błąd. Może się doszukasz.
-------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Tak - dopatrzyłem się, że odrzuca np. 0.01. Nie mówiłem, że jest prawidłowy, tylko że śmiesznie używasz kwantyfikatorów.
Ja podtrzymuję opinię, że lepiej samego sprawdzania czy jest różne od zera nie robić wyrażeniem regularnym. Miło by też było odrzucić liczby poprzedzone zerem (chyba że świadomie je zaakceptować). Ja bym zrobił taki wzorzec: Kod (?:0|[1-9]\d*)(?:[.,]\d+)? Akceptuje liczby zmiennoprzecinkowe i całkowite (tak ma być?), nie toleruje zer z przodu, ale toleruje zerową część ułamkową (tak ma być?). Tak naprawdę to potrzeba więcej szczegółów. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Tak, tak, zrozumiałem, też mnie to rozbawiło.
Kod (?!0+.0+$)\d+[\.|,]\d+ Wydaje mi się, że jest to dobre rozwiązanie (używanie regex) przy sprawdzaniu walidacji inline, np. dla patternów walidacji formularzy w HTML5. -------------------- |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
masakra.... po co tak kombinować?
zamieniasz `,` na `.` a potem `(float)$liczba > 0` i koniec. |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Wydaje mi się, że jest to dobre rozwiązanie (używanie regex) przy sprawdzaniu walidacji inline, np. dla patternów walidacji formularzy w HTML5. Do tego jest input typu number ze zmiennoprzecinkowym atrybutem step i odpowiednim min:
masakra.... po co tak kombinować? zamieniasz `,` na `.` a potem `(float)$liczba > 0` i koniec. Chyba nie do końca:
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Do tego jest input typu number ze zmiennoprzecinkowym atrybutem step i odpowiednim min:
Pierwsze słyszę żeby input tego typu służył do walidacji i informował Cię, że wprowadzona wartość 0.00 lub 0,00 jest niepoprawna. Jeśli będziesz chciał wprowadzać wartości ujemne, to zauważysz zapewne, że atrybut min na nic się tu nie zda. Wciąż mam na myśli wykorzystanie patternu do walidacji na bieżąco i np. informowanie użytkownika, że wprowadził wartość nieprawidłową (czerwona ramka w polu ceny, itp.). -------------------- |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Moim zdaniem używanie wzorca do tego jest nieeleganckie. Wzorzec powinien dotyczyć struktury, a liczba różna od zera to już wartość i lepiej byłoby to wyraźnie zaznaczyć w kodzie, używając do tego odpowiedniego operatora. Jak za jakiś czas wrócisz do kodu z takim wzorcem, to będzie trudno dojść do tego o co tam chodzi i że to ma zabraniać pewnej wartości liczbowej. Ble, ble, ble.
Wspomniałem o input number po to, że jak już chcemy korzystać z dobrodziejstw walidacji HTML5, to w ten sposób uzyskamy też odpowiedni komunikat o błędzie (że liczba jest np. za mała). |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Po co tak kombinować jak jest number_format?
-------------------- |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Chodziło o ten przykład wyżej z ifem. Natomiast uważam że regexp do tego celu to nieporozumienie.
-------------------- |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Serio macie problem z tym regexem? ;p
https://regex101.com/r/MXwh3z/3/ Ten post edytował trzczy 17.12.2017, 09:38:35 |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 13.06.2017 Ostrzeżenie: (0%) ![]() ![]() |
Witam Panowie,
dziękuje za tak liczne odpowiedzi: @SmokAnalog, @trueblue, @viking co do tematu, walidacja odbywałaby się na poziomie HTML5, dlatego rozwiązania po stronie serwera (PHP), poprostu nieuwzględniałem, bo już są. co do użycia <input type="number" step="0.01" min="0.01"> - to type="number", w HTML5 narzuca wygląd tego inputu na stronie który, nie pasuje do wyglądu mojej strony. użyłem rozwiązania: (?!0+.0+$)\d+[\.|,]\d+ rozwiązanie: (?<![,\.\w\d])(?!0[,\.]0)\d+[,\.]\d+(?![,\.\w\d])|(?<![,\.\w\d])0[,\.]0(?=\d*[1-9])\d+(?![,\.\w\d])|(?<![,\.\w\d])(?![0]+)\d+(?![,\.\w\d]) wygląda na bardzo detaliczne i szczegółowe, ale niestety po wklejeniu tego w pattern w HTML5, poprostu nie działało. |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Chyba żartujesz.... Poprawna walidacja ma się opierać po stronie PHP a nie HTML. W HTML tylko wstępnie tak aby wykluczyć 90% przypadków, ale zawsze ale to zawsze walidacja musi być przeprowadzona po stronie serwera...
|
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 04:45 |