Wie blockiere oder beschränke ich Sonderzeichen aus Eingabefeldern mit jquery?


Antworten:


132

Ein einfaches Beispiel mit einem regulären Ausdruck, den Sie ändern können, um zuzulassen / zu verbieten, was Sie möchten.

$('input').on('keypress', function (event) {
    var regex = new RegExp("^[a-zA-Z0-9]+$");
    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
    if (!regex.test(key)) {
       event.preventDefault();
       return false;
    }
});

49
Dies funktioniert nicht für eingefügten Text und kann den Benutzer auch daran hindern, keine Texttasten wie
Rücktaste

6
Dies erlaubt keine
Alex

Funktioniert nicht für spanische Wörter wie: avión (Flugzeug), árbol (Baum) usw.
nikoskip

Es funktioniert nicht im neuesten Firefox-Browser, aber es funktioniert gut in Chrom
Phoenix

Diese Lösung funktioniert für mich mit einem Bootstrap-TagsInput-Element. Um das Einfügeproblem zu beheben, können Sie der Ereignisparameterliste einfach "Einfügen" hinzufügen: $ ('Eingabe'). On ('Tastendruck, Einfügen' ', () => ........
Jim22150

60

Ich suchte nach einer Antwort, die die Eingabe nur auf alphanumerische Zeichen beschränkte, aber dennoch die Verwendung von Steuerzeichen (z. B. Rücktaste, Löschen, Tabulator) und Kopieren + Einfügen zuließ. Keine der Antworten, die ich ausprobiert habe, hat alle diese Anforderungen erfüllt, daher habe ich anhand des inputEreignisses Folgendes gefunden .

$('input').on('input', function() {
  $(this).val($(this).val().replace(/[^a-z0-9]/gi, ''));
});

Bearbeiten:
Wie Rinogo in den Kommentaren hervorhob , zwingt das obige Code-Snippet den Cursor beim Eingeben in die Mitte des Eingabetextes an das Ende der Eingabe. Ich glaube, das folgende Code-Snippet löst dieses Problem.

$('input').on('input', function() {
  var c = this.selectionStart,
      r = /[^a-z0-9]/gi,
      v = $(this).val();
  if(r.test(v)) {
    $(this).val(v.replace(r, ''));
    c--;
  }
  this.setSelectionRange(c, c);
});

1
+1 Ich habe die Antworten nach unten gescrollt und nach einer Antwort wie dieser gesucht, oder ich würde meine eigene Antwort einreichen. Diese Antwort filtert nicht zugelassene Zeichen sofort heraus! Toll!
Emilhem

2
+1 Funktioniert für eingefügten Text, beeinträchtigt nicht die Rücktaste von FF und löscht Schlüssel und verlässt sich nicht auf event.whichoder event.keycode! Ich wünschte ich könnte +10!
Rinogo

3
... ABER in Chrome und IE, wenn Sie neue Zeichen eingeben oder die Rücktaste verwenden und Tasten in der Mitte des Eingabetextes löschen , wird der Cursor an das Ende des Textes bewegt ...: / Gibt es eine einfache Problemumgehung für Dies? Ich wollte so sehr, dass das funktioniert!
Rinogo

So nah ... dieser Code hat in Chrome Mobile ein sehr seltsames Verhalten. Der Cursor springt auf dem ersten eingegebenen Buchstaben und auch auf der Rücktaste herum.
Juliano

2
@ Juliano Interessant, es scheint, dass selectionStart auf Chrome Mobile immer 0 zurückgibt, unabhängig davon, wo sich der Cursor / das Caret gerade befindet. Ich bin mir (noch) nicht sicher, ob dies ein Fehler oder ein beabsichtigtes Verhalten ist. Ich recherchiere derzeit nach dem Problem und werde meine Antwort oder meinen Kommentar hier aktualisieren, wenn ich mehr erfahre.
Rexmac

48

Kurze Antwort: Verhindern Sie das "Tastendruck" -Ereignis:

$("input").keypress(function(e){
    var charCode = !e.charCode ? e.which : e.charCode;

    if(/* Test for special character */ )
        e.preventDefault();
})

Lange Antwort: Verwenden Sie ein Plugin wie jquery.alphanum

Bei der Auswahl einer Lösung sind mehrere Dinge zu beachten:

  • Text einfügen
  • Steuerzeichen wie Rücktaste oder F5 können durch den obigen Code verhindert werden.
  • é, í, ä etc.
  • Arabisch oder Chinesisch ...
  • Browserübergreifende Kompatibilität

Ich denke, dieser Bereich ist komplex genug, um die Verwendung eines Plugins eines Drittanbieters zu rechtfertigen. Ich habe einige der verfügbaren Plugins ausprobiert, aber bei jedem einige Probleme festgestellt, also habe ich jquery.alphanum geschrieben . Der Code sieht folgendermaßen aus:

$("input").alphanum();

Oder fügen Sie für eine feinere Steuerung einige Einstellungen hinzu:

$("#username").alphanum({
    allow      : "€$£",
    disallow   : "xyz",
    allowUpper : false
});

Ich hoffe es hilft.


1
Super Zeug Mann, super. Ich musste nur eine Option zum Aktivieren / Deaktivieren des Schrägstrichs ('/') hinzufügen, da es beim Einfügen in die allowEinstellung nicht funktionierte . Aber das ist das Schöne an jquery-Plugins, die Tatsache, dass Sie sie an Ihre Bedürfnisse anpassen können. Vielen Dank!
Adrian Marinica

Danke Adrian. Übrigens habe ich gerade versucht, den Schrägstrich mit der allowOption zu aktivieren, und es hat für mich mit diesem Code funktioniert: $('#firstName').alphanum({allow: "/"});Gibt es eine Chance, dass Sie weitere Informationen bereitstellen können? Wenn es einen Fehler oder ein Problem mit den Dokumenten gibt, wäre es schön, ihn zu beheben. Prost
KevSheedy

Hallo KevSheedy, danke, dass du dir die Zeit genommen hast, dies zu testen. Entschuldigung, ich habe es nicht klar genug gemacht. Das Problem war, dass ich auch allowOtherCharSets: falseund hatte allowCaseless: false. Diese störten die eingestellten Einstellungen allow. Aus meiner Sicht denke ich, dass die allowOption alle anderen Optionen (wie allowOtherCharSetsoder allowCaseless) ablehnen sollte . Wenn Sie also ein Zeichen in der allowOption angeben , sollte es unabhängig von den anderen im Konfigurationsobjekt festgelegten Optionen zulässig sein. Gleiches gilt für disallow. Das ist aber nur meine Meinung. :) Nochmals Prost! :)
Adrian Marinica

Guter Punkt Adrian. Ich habe weitergemacht und ein Update in Version 1.0.6 veröffentlicht zu machen allowund disalloweine höhere Priorität zu haben. Es ist in Ausgabe 7 angemeldet . Hoffe es hilft
KevSheedy

6
"Also ging ich voran und schrieb jquery.alphanum" Awesome!
Felix

14

Verwenden Sie das Mustereingabeattribut von HTML5!

<input type="text" pattern="^[a-zA-Z0-9]+$" />

11
Diese Lösung verhindert zwar, dass unerwünschte Zeichen gesendet werden, verhindert jedoch nicht, dass unerwünschte Zeichen in das Eingabefeld eingegeben werden.
Rexmac

1
Es besteht auch das Risiko, dass der Benutzer keinen HTML5-Browser verwendet.
Kapitän Kenpachi

Aus UX-Erfahrung ist eine Sache, die viele Menschen mehr hassen als eingeschränkt zu sein, was sie tippen können, zu sagen, dass Sie es danach falsch gemacht haben. - Das Erzwingen von Eingaben dient dazu, Fehlermeldungen und ungültige Benachrichtigungen zu reduzieren.
Julix

1
@ Julix Es ist eine Sache von Fall zu Fall. Es gibt einige Felder, die nur numerisch sein können (Preis oder Währungsbetrag usw.), in denen es nicht sinnvoll ist, alphabetische Zeicheneingaben anzuhören. Aber ja, meine war nicht wirklich eine Lösung für das Problem von OP, sondern eine nette und einfache Möglichkeit, um beim UX-Problem zu helfen.
Keepitreal

13

Ihr Textfeld:

<input type="text" id="name">

Ihr Javascript:

$("#name").keypress(function(event) {
    var character = String.fromCharCode(event.keyCode);
    return isValid(character);     
});

function isValid(str) {
    return !/[~`!@#$%\^&*()+=\-\[\]\\';,/{}|\\":<>\?]/g.test(str);
}

@ Bhargav Rao, ich habe den anderen doppelten Beitrag gelöscht und diesen erneut veröffentlicht, weil dieser angemessener war, danke für den Hinweis
Chandler

11

Verwenden Sie Regex, um etwas zuzulassen / zu verbieten. Bei einer etwas robusteren Version als der akzeptierten Antwort können Zeichen, denen kein Tastenwert zugeordnet ist (Rücktaste, Tabulatortaste, Pfeiltasten, Löschen usw.), zuerst durch Drücken des Tastendruckereignisses und Überprüfen Sie den Schlüssel anhand des Schlüsselcodes anstelle des Werts.

$('#input').bind('keydown', function (event) {
        switch (event.keyCode) {
            case 8:  // Backspace
            case 9:  // Tab
            case 13: // Enter
            case 37: // Left
            case 38: // Up
            case 39: // Right
            case 40: // Down
            break;
            default:
            var regex = new RegExp("^[a-zA-Z0-9.,/ $@()]+$");
            var key = event.key;
            if (!regex.test(key)) {
                event.preventDefault();
                return false;
            }
            break;
        }
});

11

Schauen Sie sich das alphanumerische Plugin jQuery an. https://github.com/KevinSheedy/jquery.alphanum

//All of these are from their demo page
//only numbers and alpha characters
$('.sample1').alphanumeric();
//only numeric
$('.sample4').numeric();
//only numeric and the .
$('.sample5').numeric({allow:"."});
//all alphanumeric except the . 1 and a
$('.sample6').alphanumeric({ichars:'.1a'});

Gibt es eine für Briefe? Normalerweise benutze ich nan nur für Zahlen (wie eine Postleitzahl oder ein Telefon)

3

Schreiben Sie einen Javascript-Code in das Ereignis onkeypress des Textfelds. Erlauben und beschränken Sie je nach Anforderung das Zeichen in Ihrem Textfeld

function isNumberKeyWithStar(evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 42)
        return false;
    return true;
}
function isNumberKey(evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57))
        return false;
    return true;
}
function isNumberKeyForAmount(evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 46)
        return false;
    return true;
}


1
Dies funktioniert, wenn ich manuell tippe. Aber ich kann kopierte Sonderzeichen einfügen.
Sunil Garg

3

Ich benutze diesen Code, um andere zu ändern, die ich gesehen habe. Nur großartig für den Benutzer schreiben, wenn die gedrückte Taste oder der eingefügte Text den Mustertest (Übereinstimmung) besteht (dieses Beispiel ist eine Texteingabe, die nur 8 Stellen zulässt).

$("input").on("keypress paste", function(e){
    var c = this.selectionStart, v = $(this).val();
    if (e.type == "keypress")
        var key = String.fromCharCode(!e.charCode ? e.which : e.charCode)
    else
        var key = e.originalEvent.clipboardData.getData('Text')
    var val = v.substr(0, c) + key + v.substr(c, v.length)
    if (!val.match(/\d{0,8}/) || val.match(/\d{0,8}/).toString() != val) {
        e.preventDefault()
        return false
    }
})

warum !e.charCode ? e.which : e.charCodeund nicht einfach e.charCode ? e.charCode : e.which?
Massimiliano Kraus

Welche Änderungen müssen für die Akzeptanz von Dezimalzahlen vorgenommen werden?
30.

2

Dies ist ein Beispiel, das den Benutzer daran hindert, das Zeichen "a" einzugeben.

$(function() {
$('input:text').keydown(function(e) {
if(e.keyCode==65)
    return false;

});
});

Schlüsselcode-Aktualisierung hier:
http://www.expandinghead.net/keycode.html


Ich würde denken, dass alle Schlüsselcodes, die Sie nicht zulassen möchten, überwältigend sein können, wenn Sie versuchen, sie zu verwalten.
RSolberg

Wenn Sie jemanden darauf beschränken möchten, nur die Nummern 1 bis 5 eingeben zu können, verwalten Sie am Ende 5 Schlüsselcodes in Ihrem Code.
RSolberg

2
Es ist eigentlich kein schlechter Plan, wenn AlphaNumeric nicht das Plugin für Sie ist. Ich habe es mit einer switch / case-Anweisung zum Laufen gebracht. In diesem Beispiel sind Zeichen nicht zulässig, die in Verzeichnisnamen nicht zulässig sind: $ ('input [type =' text '], textarea'). Keydown (function (ev) {switch (ev.keyCode) {case 47: case 92: case 63: Fall 37: Fall 42: Fall 59: Fall 124: Fall 34: Fall 60: Fall 62: Rückgabe false;};});
M Miller

@ user434917, dein Code funktioniert nicht, wenn ich ihn mit Android Mobile Chrome Browser teste. Hast du eine Lösung dafür?
Pranesh Janarthanan

2
$(function(){
      $('input').keyup(function(){
        var input_val = $(this).val();
        var inputRGEX = /^[a-zA-Z0-9]*$/;
        var inputResult = inputRGEX.test(input_val);
          if(!(inputResult))
          {     
            this.value = this.value.replace(/[^a-z0-9\s]/gi, '');
          }
       });
    });

1

Ja, Sie können jQuery wie folgt verwenden:

<script>
$(document).ready(function()
{
    $("#username").blur(function()
    {
        //remove all the class add the messagebox classes and start fading
        $("#msgbox").removeClass().addClass('messagebox').text('Checking...').fadeIn("slow");
        //check the username exists or not from ajax
        $.post("user_availability.php",{ user_name:$(this).val() } ,function(data)
        {
          if(data=='empty') // if username is empty
          {
            $("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
            { 
              //add message and change the class of the box and start fading
              $(this).html('Empty user id is not allowed').addClass('messageboxerror').fadeTo(900,1);
            });
          }
          else if(data=='invalid') // if special characters used in username
          {
            $("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
            { 
              //add message and change the class of the box and start fading
              $(this).html('Sorry, only letters (a-z), numbers (0-9), and periods (.) are allowed.').addClass('messageboxerror').fadeTo(900,1);
            });
          }
          else if(data=='no') // if username not avaiable
          {
            $("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
            { 
              //add message and change the class of the box and start fading
              $(this).html('User id already exists').addClass('messageboxerror').fadeTo(900,1);
            });     
          }
          else
          {
            $("#msgbox").fadeTo(200,0.1,function()  //start fading the messagebox
            { 
              //add message and change the class of the box and start fading
              $(this).html('User id available to register').addClass('messageboxok').fadeTo(900,1); 
            });
          }

        });

    });
});
</script>
<input type="text" id="username" name="username"/><span id="msgbox" style="display:none"></span>

und Skript für Ihre user_availability.php lautet :

<?php
include'includes/config.php';

//value got from the get method
$user_name = trim($_POST['user_name']);

if($user_name == ''){
    echo "empty";
}elseif(preg_match('/[\'^£$%&*()}{@#~?><>,|=_+¬-]/', $user_name)){
    echo "invalid";
}else{
    $select = mysql_query("SELECT user_id FROM staff");

    $i=0;
    //this varible contains the array of existing users
    while($fetch = mysql_fetch_array($select)){
        $existing_users[$i] = $fetch['user_id'];
        $i++;
    }

    //checking weather user exists or not in $existing_users array
    if (in_array($user_name, $existing_users))
    {
        //user name is not availble
        echo "no";
    } 
    else
    {
        //user name is available
        echo "yes";
    }
}
?>

Ich habe versucht, für / und \ hinzuzufügen, aber es ist mir nicht gelungen.


Sie können es auch mit Javascript tun und Code wird sein:

<!-- Check special characters in username start -->
<script language="javascript" type="text/javascript">
function check(e) {
    var keynum
    var keychar
    var numcheck
    // For Internet Explorer
    if (window.event) {
        keynum = e.keyCode;
    }
    // For Netscape/Firefox/Opera
    else if (e.which) {
        keynum = e.which;
    }
    keychar = String.fromCharCode(keynum);
    //List of special characters you want to restrict
    if (keychar == "'" || keychar == "`" || keychar =="!" || keychar =="@" || keychar =="#" || keychar =="$" || keychar =="%" || keychar =="^" || keychar =="&" || keychar =="*" || keychar =="(" || keychar ==")" || keychar =="-" || keychar =="_" || keychar =="+" || keychar =="=" || keychar =="/" || keychar =="~" || keychar =="<" || keychar ==">" || keychar =="," || keychar ==";" || keychar ==":" || keychar =="|" || keychar =="?" || keychar =="{" || keychar =="}" || keychar =="[" || keychar =="]" || keychar =="¬" || keychar =="£" || keychar =='"' || keychar =="\\") {
        return false;
    } else {
        return true;
    }
}
</script>
<!-- Check special characters in username end -->

<!-- in your form -->
    User id : <input type="text" id="txtname" name="txtname" onkeypress="return check(event)"/>

2
Alter, du hast eine ganze Menge überschüssigen Codes eingefügt, der wahrscheinlich nicht hilfreich ist. Können Sie es auf das Nötigste reduzieren? Und er fragte nach jQuery, ich bin mir nicht sicher, ob das PHP relevant ist.
Simon East

@PHP Ferrari: Ich verwende Javascript-Code. Ihr Code funktioniert einwandfrei. Wie kann ich eine Popup-Warnmeldung anzeigen, wenn der Kunde das Sonderzeichen eingibt? Die Nachricht wie "Sonderzeichen nicht erlaubt".
Gem

1

nur die Zahlen:

$ ('input.time'). keydown (Funktion (e) {if (e.keyCode> = 48 && e.keyCode <= 57) {return true;} else {return false;}});

oder für die Zeit einschließlich ":"

$ ('input.time'). keydown (Funktion (e) {if (e.keyCode> = 48 && e.keyCode <= 58) {return true;} else {return false;}});

auch einschließlich Löschen und Rücktaste:

$ ('input.time'). keydown (Funktion (e) {if ((e.keyCode> = 46 && e.keyCode <= 58) || e.keyCode == 8) {return true;} else {return false;}});

Leider funktioniert es nicht auf einem iMAC


1

Wollte Alex 'Kommentar zu Dales Antwort kommentieren. Nicht möglich (brauche zuerst wie viel "rep"? Das wird nicht sehr bald passieren .. seltsames System.) Also als Antwort:

Die Rücktaste kann durch Hinzufügen von \ b zur Regex-Definition wie folgt hinzugefügt werden: [a-zA-Z0-9 \ b]. Oder Sie lassen einfach den gesamten lateinischen Bereich zu, einschließlich mehr oder weniger "nicht exotischer" Zeichen (auch Steuerzeichen wie Rücktaste): ^ [\ u0000- \ u024F \ u20AC] + $

Nur echtes Unicode-Zeichen außerhalb von Latein gibt es das Euro-Zeichen (20ac), fügen Sie hinzu, was Sie sonst noch brauchen.

Um auch Eingaben zu verarbeiten, die per Copy & Paste eingegeben wurden, binden Sie einfach an das Ereignis "change" und überprüfen Sie die Eingabe dort - löschen oder streifen Sie sie / geben Sie eine Fehlermeldung wie "nicht unterstützte Zeichen" aus.

if (!regex.test($j(this).val())) {
  alert('your input contained not supported characters');
  $j(this).val('');
  return false;
}

1

Beschränken Sie Sonderzeichen beim Tastendruck. Hier ist eine Testseite für Schlüsselcodes: http://www.asquare.net/javascript/tests/KeyCode.html

var specialChars = [62,33,36,64,35,37,94,38,42,40,41];

some_element.bind("keypress", function(event) {
// prevent if in array
   if($.inArray(event.which,specialChars) != -1) {
       event.preventDefault();
   }
});

In Angular brauchte ich ein geeignetes Währungsformat in meinem Textfeld. Meine Lösung:

var angularApp = angular.module('Application', []);

...

// new angular directive
angularApp.directive('onlyNum', function() {
    return function( scope, element, attrs) {

        var specialChars = [62,33,36,64,35,37,94,38,42,40,41];

        // prevent these special characters
        element.bind("keypress", function(event) {
            if($.inArray(event.which,specialChars) != -1) {
                prevent( scope, event, attrs)
             }
        });

        var allowableKeys = [8,9,37,39,46,48,49,50,51,52,53,54,55,56
            ,57,96,97,98,99,100,101,102,103,104,105,110,190];

        element.bind("keydown", function(event) {
            if($.inArray(event.which,allowableKeys) == -1) {
                prevent( scope, event, attrs)
            }
        });
    };
})

// scope.$apply makes angular aware of your changes
function prevent( scope, event, attrs) {
    scope.$apply(function(){
        scope.$eval(attrs.onlyNum);
        event.preventDefault();
    });
    event.preventDefault();
}

Fügen Sie im HTML die Direktive hinzu

<input only-num type="text" maxlength="10" id="amount" placeholder="$XXXX.XX"
   autocomplete="off" ng-model="vm.amount" ng-change="vm.updateRequest()">

und im entsprechenden Winkelregler erlaube ich nur 1 Periode, konvertiere Text in Zahl und füge Zahlenrundung bei 'Unschärfe' hinzu.

...

this.updateRequest = function() {
    amount = $scope.amount;
    if (amount != undefined) {
        document.getElementById('spcf').onkeypress = function (e) {
        // only allow one period in currency
        if (e.keyCode === 46 && this.value.split('.').length === 2) {
            return false;
        }
    }
    // Remove "." When Last Character and round the number on blur
    $("#amount").on("blur", function() {
      if (this.value.charAt(this.value.length-1) == ".") {
          this.value.replace(".","");
          $("#amount").val(this.value);
      }
      var num = parseFloat(this.value);
      // check for 'NaN' if its safe continue
      if (!isNaN(num)) {
        var num = (Math.round(parseFloat(this.value) * 100) / 100).toFixed(2);
        $("#amount").val(num);
      }
    });
    this.data.amountRequested = Math.round(parseFloat(amount) * 100) / 100;
}

...

1

Um Sonderzeichen zu ersetzen, setzen Sie Leerzeichen und konvertieren Sie in Kleinbuchstaben

$(document).ready(function (){
  $(document).on("keyup", "#Id", function () {
  $("#Id").val($("#Id").val().replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '').toLowerCase());
 }); 
});

0
[User below code to restrict special character also    

$(h.txtAmount).keydown(function (event) {
        if (event.shiftKey) {
            event.preventDefault();
        }
        if (event.keyCode == 46 || event.keyCode == 8) {
        }
        else {
            if (event.keyCode < 95) {
                if (event.keyCode < 48 || event.keyCode > 57) {
                    event.preventDefault();
                }
            }
            else {
                if (event.keyCode < 96 || event.keyCode > 105) {
                    event.preventDefault();
                }
            }
        }


    });]

4
Nur-Code-Antworten sind ohne Erklärung nicht allzu nützlich.
Vemonus

0

Erlaube nur Zahlen in TextBox (Alphabete und Sonderzeichen einschränken)

        /*code: 48-57 Numbers
          8  - Backspace,
          35 - home key, 36 - End key
          37-40: Arrow keys, 46 - Delete key*/
        function restrictAlphabets(e){
            var x=e.which||e.keycode;
            if((x>=48 && x<=57) || x==8 ||
                (x>=35 && x<=40)|| x==46)
                return true;
            else
                return false;
        }

0
/**
     * Forbids special characters and decimals
     * Allows numbers only
     * */
    const numbersOnly = (evt) => {

        let charCode = (evt.which) ? evt.which : evt.keyCode;
        if (charCode === 46 && charCode > 31 && (charCode < 48 || charCode > 57)) {
            return false;
        }

        let inputResult = /^[0-9]*$/.test(evt.target.value);
        if (!inputResult) {
            evt.target.value = evt.target.value.replace(/[^a-z0-9\s]/gi, '');
        }

        return true;
    }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.