2013-02-21 10 views
6

Mam problem z wprowadzaniem liczb w formularzu. Kiedy wpisuję numer, powiedzmy 88,2 i przesyłam go, nie ma żadnych problemów. Ale kiedy ta druga osoba robi to samo, możesz zobaczyć w kodzie php, czy echo zmiennej z wejścia liczbowego, że usunął przecinek dziesiętny (.).Metoda wprowadzania kodu HTML usuwa separator dziesiętny?

Nie usuwa przecinka dziesiętnego, gdy używa przecinka, ale kiedy używam przecinka, usuwa go dla mnie. Czy istnieje sposób, aby to naprawić i sprawić, by akceptował tylko "." jako przecinek dziesiętny?

Oto wejście:

<input id="version" name="version" step="0.1" min="1.0" max="250.0" type="number" class="input-small" placeholder="87.2"></input> 

Nie ma nic w kodzie PHP, który jest niczym niezwykłym, tylko

echo $_POST['version']; 

input-small css:

.input-small { 
    width: 90px; 
} 
+0

wierzę '' przyjmuje tylko liczby całkowite jak prawidłowych wartości. Dozwolone cyfry dziesiętne to prawdopodobnie nieprawidłowe/niezatwierdzone sprawdzanie poprawności przez przeglądarkę. –

+2

Uwaga: Europejczycy używają przecinka do znaku dziesiętnego. Czy możesz wymusić gdzieś ustawienie kulturowe? –

+0

Wiem, że używamy różnych znaków, ale czy nie ma sposobu, aby NIE usunąć kropki? Jeśli drugi facet wchodzi w 88.2, pojawia się jako 882, co jest naprawdę denerwujące. –

Odpowiedz

2

Support to <input type=number> jest nadal bardzo ograniczona, niekompletne i b brzydki.

Na przykład, nie ma obsługi w IE 10 i Firefox 19. Na nich element powraca do elementu <input type=text>, co oznacza, że ​​dowolny ciąg jest akceptowany jako wejściowy i przekazywany do serwera jako taki, bez sprawdzania .

W przeglądarkach, które go obsługują, takich jak Chrome, zachowanie jest różne i prawdopodobnie będzie się różnić, ponieważ HTML5 CR definition celowo pozostawia to otwarte: przeglądarka jest zobowiązana do dostarczenia widżetu do wprowadzania liczbowego i zagwarantowania, że dane ostatecznie wysłane do serwera są poprawne zgodnie z atrybutami elementu (w podanym zakresie itp.).

W praktyce implementacja zależy od ustawienia narodowego przeglądarki i nie można tego kontrolować jako autora. Oznacza to, że przeglądarka może zaakceptować 88,2 lub zaakceptować 88,2 (i wewnętrznie przekonwertować ją do 88,2), lub może zaakceptować oba, lub może zasadniczo zaakceptować dane wejściowe tylko w hieroglifach (i wewnętrznie przekonwertować je do Forma kanoniczna). Może nawet przeanalizować dane wprowadzane przez użytkownika, aby wszystkie dodatkowe znaki zostały po prostu usunięte, co oznacza, że ​​88FOO i 88.2 mogą zostać obcięte do 88, gdy przecinek jest separatorem dziesiętnym.

To, co dzieje się w twoim przypadku, jest trudne do podjęcia, ponieważ przeglądarki i platformy nie zostały opisane i nie jest jasne, co otrzymuje serwer. Ważne jest jednak to, że nie można w ogóle polegać na <input type=number>. Można go używać w kontrolowanym środowisku, w którym każdy używa tej samej wersji tej samej przeglądarki w tym samym systemie operacyjnym, włącznie z wersją językową i ustawieniami narodowymi. W przeciwnym razie użyj <input type=text> do wprowadzania liczbowego i parsuj serwer po stronie wejściowej i opcjonalnie wstępnie sprawdź po stronie klienta, i upewnij się, że poinformowałeś użytkownika o oczekiwanym formacie danych wejściowych (takim jak przecinek dziesiętny kontra przecinek dziesiętny).

Powiązane problemy