Forumlar +rzeichen verbieten

TsEnG

Mitglied
Hi
wie kriege ich es hin das ich in einem Textformular bestimmte zeichen verboten weden ode rdas ich NUR Zahlen UND "," eingeben darf



Danke

mfg
tsEng
 
Code:
function checkInput(a_oInput)
{
    if (!a_oInput.value.match(/^[0-9,]*$/)) {
        window.alert("Bitte nur Zahlen oder Kommans eingeben!");
        a_oInput.focus();
    }
}

[...]

<input type="text" onchange="checkInput(this);">
Das Ganze lässt sich dann natürlich beliebig erweitern, z.B. so, dass nur ein
Komma eingegeben werden kann, usw..
 
Das Snippet von Fabian, gibt aber nur eine Meldung aus - Die Eingaben werden doch trozdem geschrieben... Wo liegt denn dann der Sinn? :rolleyes:

Eine Art Mask für Input-Felder zu realisieren ist etwas schwieriger (meine Erfahrungen basieren nur auf dem IE), da man vorher (also bevor das Zeichen in das Feld geschrieben wird) den resultierenden String kennen muss. Das kann man über eine Text-Range und den Event-Keycode des onkeypress-Events (alle anderen Key-Events geben "andere" Key-Codes zurück) realisieren... Nur: Eine Textrange verhält sich in einem Input-Feld leider nicht so, wie gewollt und man muss die Sache über eine Textarea regeln.

Gruss
Jan

PS: Das Script um den Text VOR und NACH der Range zu finden, habe ich heute sogar hier im Forum gesehen ;)
 
Die unerlaubten Zeichen zu entfernen, sollte doch kein Problem sein.... da muss man auch nicht mit TextRange anfangen... da man in Eingabefeldern alles über value bekommt:
Code:
function checkInput(a_oInput)
{
    if (!a_oInput.value.match(/[^,\d]$/)) {
        window.alert("Bitte nur Zahlen oder Kommas eingeben!");
        a_oInput.value=a_oInput.value.replace(/[^,\d]/g,'');
        a_oInput.focus();
    }
}
Dann könnte man per copy&paste zwar immer noch Unerlaubtes hineintun... aber das sollte ja nicht so schlimm sein, sowas soll schliesslich ne Hilfestellung sein.

Böswilliges Handeln kann man damit nicht verhindern... eine endgültige Überprüfung erfolgt bei Benutzereingaben idR sowieso durch ein serverseitiges Skript.
 
Zuletzt bearbeitet:
öhm... dein regex ersetzt doch einfach alle erlaubten Zeichen durch '' ...:rolleyes: (zumindest war das so, bevor ich meine Antwort geschrieben habe...)

Dazu kommt noch, dass die Sache sich mit Sicherheit auf Komma-Zahlen bezieht. Eine Komma-Zahl hat meines Wissens nach nur 1 Komma... und darauf kann man über diesen Weg garantiert nicht reagieren. Da man ein Zeichen auch mittendrin setzen kann, braucht man die Möglichkeit das eventuelle Ergebniss im Vorfeld zu kennen... daher mein TIP mit der Text-Range... damit kann man das definitiv lösen indem der value während der Eingabe auf einen Pattern geprüft wird und der return-wert des events demenstprächend die Eingabe zulässt oder nicht.

Wenn man nur auf einzelne Zeichen reagiert, kann man das ja über einen return-Wert regeln und den regex auf den keyCode anwenden... ich bin halt von einer Art Mask ausgegangen... bei allen anderen Varianten kann man immernoch falsche Daten reinschreiben: ",,,0,,1,,43,"... Das Problem ist das Komma :)

Gruss
Jan
 
JO...das vorige Beispiel ersetzt wirklich die guten Zeichen ...
dann eben so... diesmal sogar getestet :-)
Code:
<script type="text/javascript">
<!--
tmp_value='';
function checkInput(a_oInput)
{
if (a_oInput.value.match(/[^,\d]/))
    {
    alert("Bitte nur Zahlen oder Kommas eingeben!");
    a_oInput.value=tmp_value;a_oInput.focus();
    }
else if(isNaN('0'+a_oInput.value.replace(/,/g,'.')))
    {
    alert("Bitte nur ein Komma eingeben!");
    a_oInput.value=tmp_value;a_oInput.focus();
    }
tmp_value=a_oInput.value;
}
//-->
</script>
Was du mit Textrange vorhast, weiss ich allerdings immer noch nicht...
Deine Idee mit dem Keycode funktioniert auch nicht... vergleiche mal probehalber den Keycode von "1" und "!" ... bei mir sind die identisch.

Abgesehen davon... wie gesagt... wer dort ein unerlaubtes Zeichen hineinbekommen will, schafft das auch.
Mit nem kleinen Hilfsmittel schreibe ich dir alle möglichen Zeichen dort hinein, ohne dass überhaupt ein Event im Formularfeld feuert :-)

Und im Notfall deaktiviere ich eben Javascript im Brauser
 
@keyCode: wie schon oben geschrieben gibt im IE nur das Event onkeypress den richtigen keyCode... bei allen anderen sind z.B. die 0 vom Num-Block anders als die "normale" 0.

Um das Austricksen der Funktion ansich geht es mir auch garnicht... Mir gehts um die Usablity. Bei deiner Lösung sind meine Eingaben nach der ersten falscheingabe (wenn tmp_value noch nicht gesetzt ist) futsch und warum tauchen Buchstaben überhaupt erst im Feld auf, wenn ich doch sowieso nur Nummern eingeben kann? ...verstehst?

Mein Lösungsansatz geht dahin, dass man tatsächlich nur das eintippen kann, was auf den Regex matched. Wie eine Mask halt: #####,## z.B. :) Und genau das kann man über das TextRange-Objekt realisieren... keine nervigen Alert-Fenster oder irgendein Zeichen im Feld, dass dort nicht reindarf, da man mit Hilfe der Textrange die genaue Eingabe erfassen kann, BEVOR Sie überhaupt gemacht wurde. Man erfasst den Text VOR der aktuellen Range und NACH der aktuellen Range (funktioniert soweit ich weiss nur in einer Textarea). Über den Keycode ermittelt man das getippte Zeichen. Diese 3 Teile kann man nun zusammensetztn und erhält den "kommenden" String. Auf diesen wendet man den Regex an und weiss, bevor das Event abgeschlossen ist, ob der "kommende" String gültig ist, oder nicht. That's it.

Das hier hab ich eben mal auf die Schnelle noch gefunden, wenn man NUR Nummern zulassen möchte.
Code:
<script type="text/javascript">
<!--
function checkInput() {
    var iCode=event.keyCode;
    if (iCode>47 && iCode<58) {
        event.returnValue=true;
    } else {
        event.returnValue=false;
    }
}
//-->
</script>
<input type="text" onkeypress="checkInput();">
Gruss
Jan
 
bei deinem Beispiel kann ich Problemlos die Zeichen:
!"§$%&/()=

...eingeben :-)

Wenn bei Fabians oder dem meinem die alerts stören... das geht auch ohne.
Aber wie gesagt... über Keycode gehts nicht , daher muss der Wert erst in das Feld hinein, um ihn auszulesen und dann wieder herauszukicken.
 
Zuletzt bearbeitet:
Original geschrieben von fatalus
bei deinem Beispiel kann ich Problemlos die Zeichen:
!"§$%&/()=

...eingeben :-)

Wenn bei Fabians oder dem meinem die alerts stören... das geht auch ohne.
Aber wie gesagt... über Keycode gehts nicht , daher muss der Wert erst in das Feld hinein, um ihn auszulesen und dann wieder herauszukicken.
...na dann will ich dich in deinem Glaube lassen und nicht noch ein drittes mal auf onkeypress hinweisen. Ich wollte nur auf eine saubere Lösung hinweisen, die definitiv existiert - wenn man nicht drauf eingeht, dann solls mir auch egal sein.

Gruss
Jan
 
Code:
<script type="text/javascript">
function checkInput(a_oEvent)
{
    if (window.navigator.appName == "Netscape") {
        iKeyCode = a_oEvent.which;
    } else {
        iKeyCode = event.keyCode;
    }

    if ((iKeyCode < 32) || (String.fromCharCode(iKeyCode).match(/[,0-9]/))) {
        return true;
    } else {
        return false;
    }
}
</script>

<input type="text" onkeypress="return checkInput(event);">
So, da habt ihr`s für Mozilla und IE!

Aber was ganz anderes: Abgesehen davon, dass man es, wie fatalus ja schon
sagte, sehr leicht faken kann (man braucht sich nur sein eigenes Formular
machen), ist es sinvoller, die Eingaben beim Submit zu testen!
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück