Archivlink: javarea.de Forum > JavaScript > Formularfelder auf Inhalt überprüfen? fließkommazahlen
Vollständigen Link anzeigen: javarea.de Forum > JavaScript > Formularfelder auf Inhalt überprüfen? fließkommazahlen

Pages: [1] 2 ... nächste » ... Letzte »

geschrieben von Cstudent am 11.01.2006 - 08:34
Hallo alle zusammen,

noch ein Problem:

Es geht weiter um prüfen eines Formulars.
In einer Zeile werden die Fließkommazahlen (double z. B 234.5678) eingegeben. Die Zahlen kann man mit Punkt ( . ) oder mit Komma ( , ) trennen. Es soll auf Inhalt überprüft (Nur Zahlen) und wenn die Trennzeichen Komma ist, soll die Komma durch einen Punkt ersetzt!

Beispiel:

A23,34 oder 2,34,45 oder ,32 oder 32, - sind nicht erlaubt!!!
234,032 => 234.032

hat jemanden eine Idee wie ich es lössen kann???


Ich werde mich für jeden Vorschlag freuen.

Danke + Gruß

Valeri Oberdoerfer

geschrieben von Micha am 11.01.2006 - 09:33
Ja, ich hätte da was anzubieten...

HTML-Quelltext
1: 
2: 
3: 
4: 
<script>
str = "3,14";
alert(str.replace(/\,/g, "."));
</script>


nachdem Du das gemacht hast, gehtst Du mit parseFloat noch mal drüber. Dadurch solltest Du auch eine Zahl erhalten, wenn der User 3,1,4 eingibt....

Liebe Grüße Micha

geschrieben von okley am 11.01.2006 - 13:35
Du könntest auch direkt bei der Eingabe den Filter einbauen.
Also das würde heissen, du prüfst ob der User eine Zahl oder ein Punkt eingeben, alles andere ist nicht erlaubt. Du kannst dann z.b. eine Fehlermeldung als alert ausgeben.
Weiter kannst du prüfen: Wenn bereits eine gültige Zahl eingegeben wurde und noch kein Punkt, dann darfst du einen Punkt machen, sonst nicht.

Verstehst du wie ich meine?
Als Ansatz:

HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
<script type="text/javascript">
function pruefeEingabe(){
// prüfe hier ob die eingabe richtig war, wenn ja return true

// mit return false, wird die eingabe nicht ins feld geschrieben
return false;
}
</script>
<input type="text" id="txtEingabeZahl" onkeypress="javascript:return pruefeEingabe()" />
<input type="text" id="txtEingabeZahl2" onkeypress="javascript:return pruefeEingabe()" />

<span id="spnFehler" />


http://www.google.com/search?hl=en&....mp;spell=1


Viel Spass!

geschrieben von Hawk am 11.01.2006 - 14:14
Hallo,

Was haltet ihr hiervon, ist sowas wie Okley meint.
PHP-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 

<?
<script type="text/Javascript" language="JavaScript" >
<!--
var 
par   = new Array();
    
par[0]= 0;
    
par[1]= 0;
    
par[2]= 0;
    
par[3]= 0;

function 
pruefe() {
 
eing   = new Array();
 
eing[0]= document.f.r0.value;
 
eing[1]= document.f.r1.value;
 
eing[2]= document.f.r2.value;
 
eing[3]= document.f.r3.value;

 for(
0;eing.length;i++)
  if(
isNaN(eing[i])){
  
alert("In den Feldern dürfen nur Zahlen und ein . stehen");
       return 
false;
       }
  for(
0;eing.length;i++)
   
par[i] = parseFloat(eing[i]);
    
alert(par[0]+","+par[1]+","+par[2]+","+par[3]);
       }
//-->
</script>
<noscript></noscript>
</head>
<body >
<form name="f">
<input type="Text" name="r0" value="" size="" maxlength=""><br>
<input type="Text" name="r1" value="" size="" maxlength=""><br>
<input type="Text" name="r2" value="" size="" maxlength=""><br>
<input type="Text" name="r3" value="" size="" maxlength=""><br>
<input type="Button" name="" value="O.K" onClick="pruefe()">
</form>
</body>
?>


geschrieben von Micha am 11.01.2006 - 15:44
Zitat
 Original geschrieben von Hawk am 11.01.2006 - 14:14
Hallo,
Was haltet ihr hiervon, ist sowas wie Okley meint.


...jain, man beachte:

Zitat
 Es soll auf Inhalt überprüft (Nur Zahlen) und wenn die Trennzeichen Komma ist, soll die Komma durch einen Punkt ersetzt!


das Ausgangsposting...

Micha




geschrieben von Hawk am 11.01.2006 - 17:04
@derletztekick

was hälst du hiervon:

PHP-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 

<?
<script type="text/Javascript" language="JavaScript" >
<!--


function 
pruefe() {
 
eing   = new Array();
 
eing[0]= document.f.r0.value;
 
eing[1]= document.f.r1.value;
 
eing[2]= document.f.r2.value;
 
eing[3]= document.f.r3.value;

 
p    = new Array();
 
p[0] = eing[0].replace(/\,/g,".");
 
p[1] = eing[1].replace(/\,/g,".");
 
p[2] = eing[2].replace(/\,/g,".");
 
p[3] = eing[3].replace(/\,/g,".");

 
par   = new Array();
 
par[0]= parseFloat(p[0]);
 
par[1]= parseFloat(p[1]);
 
par[2]= parseFloat(p[2]);
 
par[3]= parseFloat(p[3]);

 
alert(par[0]+par[1]+par[2]+par[3]);
       }

//-->
</script>
<noscript></noscript>
</head>
<body >
<form name="f">
<input type="Text" name="r0" value="" size="" maxlength=""><br>
<input type="Text" name="r1" value="" size="" maxlength=""><br>
<input type="Text" name="r2" value="" size="" maxlength=""><br>
<input type="Text" name="r3" value="" size="" maxlength=""><br>
<input type="Button" name="" value="O.K" onClick="pruefe()">
</form>
</body>
?>


geschrieben von Micha am 11.01.2006 - 17:14
Ich würde zwei Sachen anders machen.

Zunächst würde ich die Inputfelder in einem Array hinterlegen: name="wasauchimmer[]"
Damit vereinfacht sich Deine Objektzuweisung etwas und sie wird unabhängig und in _einem_ Array drin.

HTML-Quelltext
1: 
var elements = document.getElementsByName("wasauchimmer[]");


Dann würde ich Komma durch Punkt ersetzen - so wie Du es vorsiehst. Nachdem Du parseFloat() genommen hast, würde ich -so wie _Du_ es eigentlich bereits vorgeschlagen hattest - mit isNaN(elements[i]) prüfen, ob es überhaupt eine Zahl ist.

parseFloat() liefert bei einem String NaN, wenn die Zahl nicht aus dem String gelöst werden konnte - vgl selfhtml - parseFloat().

Sonst sind auch noch Eingaben wie "A.BBB" zulässig...

Micha

geschrieben von Hawk am 11.01.2006 - 17:52
@derletztekick,

mann müßte wissen für was man es braucht um das optimale zu machen.

geschrieben von Micha am 11.01.2006 - 18:13
Ja natürlich aber global gesehen ist
HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
eing   = new Array();
eing[0]= document.f.r0.value;
eing[1]= document.f.r1.value;
eing[2]= document.f.r2.value;
eing[3]= document.f.r3.value;

p    = new Array();
p[0] = eing[0].replace(/,/g,".");
p[1] = eing[1].replace(/,/g,".");
p[2] = eing[2].replace(/,/g,".");
p[3] = eing[3].replace(/,/g,".");

par   = new Array();
par[0]= parseFloat(p[0]);
par[1]= parseFloat(p[1]);
par[2]= parseFloat(p[2]);
par[3]= parseFloat(p[3]);


vs.

HTML-Quelltext
1: 
var elements = document.getElementsByName("wasauchimmer[]");


in Bezug auf die Anzahl und die Initialisierung der Felder kürzer Das ist ein Verhältnis von 3:1...


geschrieben von Hawk am 11.01.2006 - 19:22
@derletztekick,

ich habe einfach die for schleife noch eingebaut.

PHP-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 

<?
<script type="text/Javascript" language="JavaScript" >
<!--


function 
pruefe() {
 
eing   = new Array();
 
eing[0]= document.f.r0.value;      //Einlesen der Felder
 
eing[1]= document.f.r1.value;
 
eing[2]= document.f.r2.value;
 
eing[3]= document.f.r3.value;

 
p    = new Array();
 
p[0] = eing[0].replace(/\,/g,".");   //Komma soll durch Punkt ersetzt werden
 
p[1] = eing[1].replace(/\,/g,".");
 
p[2] = eing[2].replace(/\,/g,".");
 
p[3] = eing[3].replace(/\,/g,".");

 for(
i=0;i<p.length;i++)               // ob es eine Zahl ist
  
if(isNaN(p[i])) {
   
alert("Es sind nur Zahlen zugelassen");
   return 
false;
   }

 
par   = new Array();
 
par[0]= parseFloat(p[0]);              //In Zahl umwandeln
 
par[1]= parseFloat(p[1]);
 
par[2]= parseFloat(p[2]);
 
par[3]= parseFloat(p[3]);

 
alert(par[0]+par[1]+par[2]+par[3]);
       }

//-->
</script>
?>


geschrieben von Micha am 11.01.2006 - 19:43

geschrieben von Hawk am 11.01.2006 - 19:50
@derletztekick,

wenn ich es richtig sehe, hat deine Lösung wirklich nur eine prüf function,

was ist aber wenn mit den Werten weiter gearbeitet werden soll.

geschrieben von Micha am 11.01.2006 - 20:01
Hallo Hawk

zunächst möchte ich Dir die Zielstellung noch mal nahelegen:
Formularfelder auf Inhalt überprüfen? fließkommazahlen

Zu Deiner weiterführenden Frage:

Zunächst müssen wir klären, was Du unter "weiter arbeiteten" verstehst.

Es gibt hierbei zunächst zwei Sachen, die mir einfallen: Eine Weiterverarbeitung der Formulardaten mittels JavaScript und zum anderen eine verwendung in einem PHP-Schript.

Für die Lösung in einem PHP-Script ist meine Lösung erstmal gedacht, daher habe ich mich für onsubmit() entschieden. Das Formular wird nur dann abgeschickt, wenn alle Eingaben korrekt sind. Sie könnten mit GET/POST ausgelesen werden...

Wenn man hingegen in JavaScript die Daten weiter verwenden möchte, dann sollte man zunächst das onlick wieder einfügen, damit das Formular nciht versendet wird und die Seite somit nicht neu geladen wird.

Das wäre die erste und auch einzige Änderung, die man machen müsste. Wenn Du wissen wollest, wo die Zahlen nun stehen, so ist die Antwort: in dem Array myElements. Wenn Du einen bestimten Wert haben willst, dann ruf ihn auf

HTML-Quelltext
1: 
myElements[i].value


Zusammenfassend kann ich derzeit keinen Nachteil aus meiner Lösung erkennen, der sich gegenüber Deiner ergibt. Es mag aber sein, das es einen gibt - es hängt vom Anwendungsfall ab.

Was genau meinst Du also mit "gearbeitet", da ist ja der springende Punkt.

Micha

geschrieben von Hawk am 11.01.2006 - 20:10
@derletztekick,

Entschuldige wenn ich Dir zu nahe getreten bin, das war nicht meine Absicht.

Aber mann kann doch mal drüber reden.

Wenn Cstudent mal sagen würde was er damit anstellen will, hätte mann eine grundlage womit mann arbeiten kann um dies effektiv zugestalten.

geschrieben von Micha am 11.01.2006 - 20:19
Hallo Hawk

Oh, keine Sorge, ich habe es nicht als Angriff gesehen... Ich habe auch nichts dagegen, wenn einer Fragen stellt - warum sollte ich?

Nur muss ich eben wissen - in dem Fall - was man unter "weiterverarbeiten" versteht. Da mir aber das Ziel nicht bekannt ist, ist alles spekulativ.

Ich denke aber, das mein Code immer kürzer sein sollte als Deiner, da ich die drei Felder nicht initialisiert habe...

Michael


Powered by: JBB v.2.0.4 Copyright ©2000-2006, www.javarea.de.