HTML input textfeld type=number nachkommastellen

3 Antworten

Dafür gibt es kein extra Input Typ. Zumindest ist mir keiner bekannt. Du kannst aber mit dem Attribut pattern arbeiten. Das erwartet einen regulären Ausdruck, der dann mit der Eingabe verglichen wird. Nur wenn der Ausdruck passt, ist das Feld dann valid. Hier mal ein Beispiel:

<input type="text" title="Nummer im Format xxxxx,xx" name="numer" value="" pattern="\d+(,\d{2})?" required="required">

Im Title kannst Du noch eine zusätzliche Erklärung abgeben, welches Format Du erwartest. Das wird dann in der Fehlermeldung mit angezeigt, zumindest beim FF. required="required" heißt, das Feld muss unbedingt ausgefüllt sein. Das kannst Du weglassen, wenn das Feld auch leer sein darf. Die Magic passiert bei pattern. Hier wird eine Zahl erwartet, Entweder ohne Komma oder eine mit genau zwei Kommastellen. Willst Du auch eine Kommastelle zulassen, heisst die Expession so:

pattern="\d+(,\d{1,2})?"

Möchtest Du immer ein Zahl mit Komma, dann lässt Du einfach das letzte Fragezeichen weg. Das funktioniert, alles natürlich nur mit Browsern die HTML5 unterstützen. Da Du aber schon mit verschiedenen Input Typen experimentierst, gehe ich davon aus, das Du eh für moderne Browser entwickeln willst.

JavaScript nutzen, wenn's schon unbedingt im Browser sein muss. Denn wenn du Eingaben validieren willst um sie z.B. in einem PHP-Skript weiterzuverarbeiten ist das höchst unsicher.


rj45abqz 
Beitragsersteller
 04.10.2013, 21:33

muss nicht unbedingt im browser sein und ja es ist für ein php-skript.

verreisterNutzer  04.10.2013, 21:36
@rj45abqz

Dann lass es gleich in deinem PHP-Skript überprüfen. Ist die sicherste Lösung. Parallel kannst du auch noch JavaScript im Browser nehmen, damit solche Werte von Otto-Normal-Usern gar nicht erst eingegeben werden können, aber in PHP muss es sein.

rj45abqz 
Beitragsersteller
 04.10.2013, 21:42
@verreisterNutzer

dann muss ich in php jedes einzelne zeichen des strings überprüfen oder gibt es da eine bessere methode?

verreisterNutzer  04.10.2013, 21:49
@rj45abqz

Einen regulären Ausdruck zu verwenden wäre wohl das schlauste.

Verwendung:

if(preg_match('/^\d+,\d{2}$/', $eingabe) === 1){ passt } else { passt nicht }

(Der Pattern im Beispiel erfordert eine Zahl mit mindestens einer Stelle vor dem Komma, zwangsweise Komma und genau zwei Nachkommastellen)

Such dir mal die Bücher "Mastering Regular Expressions" und "Regular Expressions Cookbook" (beide bei O'Reilly) raus, falls du damit mehr anstellen willst – RegEx ist wirklich mächtig, es ist sagenhaft wie viel man damit anstellen und sich Schreibarbeit sparen kann.