Eingabe auf Gültigkeit prüfen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Eingabe auf Gültigkeit prüfen

    Hallo zusammen

    bevor ihr mich zerreist von wegen Suchfunktion... Ich hab gesucht aber nichts gefunden. Vermutlich auch nicht zuletzt, weil ich nicht genau weis wonach ich überhaupt suchen muss...


    Also, folgendes Problem:
    Ich muss in einem bereits bestehenden Formular, zwei Felder nach bestimmten Vorgaben überprüfen. Weil mein Vorgänger andere checks bereits mit JavaScript gelöst hat, muss ich dies nun auch so weiterziehen.

    Folgende Vorgaben habe ich:

    Feld 1:
    - Der Wert muss nummerisch sein
    - Maximal 3 Stellen vor dem Trennzeichen
    - Maximal 3 Stellen nach dem Trennzeichen
    - Als Trennzeichen muss ein . eingegeben werden

    Feld 2:
    - Der Wert muss nummerisch sein
    - Maximal 2 Stellen nach dem Trennzeichen
    - Als Trennzeichen muss ein . eingegeben werden

    Die Prüfung des Feld 2 dürfte, wenn ich das Feld 1 mal habe, ja nicht mehr so schwierig sein. Mit PHP wär das für mich auch kein Problem, aber mit JavaScript steh ich auf Kriegsfuss.


    Ich hoffe jemand kann mir helfen.

    Danke schon mal

    Gruss
    Philipp

  • #2
    was genau klappt denn nun nicht?

    Kommentar


    • #3
      Öhm.... nichts....

      weis ja nicht mal wo ich ansetzten soll...

      Kommentar


      • #4
        Ja, das geht, suchbegriffe hierfuer sind:

        Regulaere Ausdruecke...
        + Literalzeichen
        + Zeichenklassen
        + Wiederholung
        + Gruppierung
        + Alternativen
        + Vergleichsoperatoren


        Das ist der Auszug aus meiner Referenz... einfach bei Google suchen. Falls du mehr damit arbeiten willst, wuedr ich mir die Referenz zulegen. Ich komme damit gut zurecht. ISBN: 3897212536 (Amazon laesst gruessen)

        MFG
        Immer schoen den Quelltext brechen....
        Sorry: UMBRECHEN!

        Kommentar


        • #5
          Reguläre Ausdrücke... Darauf hät ich auch kommen können...

          Nun ja, ich hab da mal ein Script, das schon fast das macht, was ich will:

          PHP-Code:
          // Ist es überhaupt eine Zahl
          if (isNaN(document.form1.preis.value)) {
                  
          preis document.form1.preis.value;
                  
          alert(preis " ist kein gueltiger Wert!");
                  return 
          false;
                } else {
                  
          // Wenn ja, Preis auf gülties Format prüfen    
                  
          var preis document.form1.preis.value;
                  
          // Reg. ausdruck definieren 
                  
          var such = /(\d)\.(\d)/;
                  var 
          erg such.test(preis);
                  
                  if (
          erg == false) {
                      
          alert(preis+" hat ein ungültiges Format");
                      
          document.form1.preis.value;
                      return 
          false;
                  }
              } 
          Problem:
          1.2 ist genau so korrekt, wie 11111.222222

          Aber wie ich dem Teil nun beibringen kann, das ein Wert mindestens 0.0 aber maximal 999.999 sein darf, ist mir schleierhaft.

          Kommentar


          • #6
            wandele es doch einfach in eine zahl und schau, ob ...

            daß du bei der überprüfung js nur als zusatz verwenden kannst, per php aber immer prüfen mußt, ist dir aber klar?

            das trennzeichen würde ich übrignes bei bedarf austauschen, anstatt das dem user zuzumuten. der freut sich sicher eher, wenn du werte in möglichst vielen formen akzeptierst.
            Die Zeit hat ihre Kinder längst gefressen

            Kommentar


            • #7
              /(d){3}(.|,)(d){3}/

              oder so?

              Kommentar


              • #8
                /(d){3}(.|,)(d){3}/
                geht nicht. Dieser Ausdruck verlangt exakt 3 Stellen.

                Mindestens bekomme ich einen Fehler, wenn ich was anderes eingebe.


                Da es sich hier um eine Intranet-Anwendung handelt denke ich, das ich dem User durchaus "vorschreiben" kann, wie ich die Daten eingetippt hanben möchte.

                Kommentar


                • #9
                  mal selbst nachschlagen?
                  http://pcre.nophia.de/explain/quanti...hp#parantheses

                  Kommentar


                  • #10
                    Dieser Ausdruck verlangt exakt 3 Stellen.
                    dann schau halt, wie man mindest/maximal-anzahl definiert
                    das ich dem User durchaus "vorschreiben" kann, wie ich die Daten eingetippt hanben möchte.
                    immer diese fadenscheinige, sinnlose argumentation. daß deine anwendung dadurch eventuell an eleganz gewinnen könnte, ... ist mir doch egal.

                    @penizillin: auch wenn dieser teil inhaltlich wohl gleich geblieben ist, ist das tutorial auf http://regexp-evaluator.de/tutorial-...weifteklammern im ganzen aktueller und vollständiger - glaube ich
                    Zuletzt geändert von derHund; 05.10.2005, 18:58.
                    Die Zeit hat ihre Kinder längst gefressen

                    Kommentar


                    • #11
                      Auszug aus http://www.regenechsen.de/regex_allg...llg.php?teil=3

                      {x,y} das Zeichen davor muss mindestens x-mal, aber höchstens y-mal vorkommen. Man kann dabei Teile des Bereiches weglassen: {x,} heißt beliebig häufig, aber mindestens x-mal. {x} heißt genau x-mal
                      Warum kann ich also mit /(\d){1,3}\.(\d){2,3}/; sowohl vor wie auch nach dem Punkt mehr als 3 Zeichen eingeben. Das es vor dem Punkt mindestens 1 Zeichen und nach dem Punkt mindestens 2 haben soll, rafft das Teil.


                      Nachtrag:
                      Danke für die Links. Ich kann die aber studieren und interpretieren solange ich will aber ich komme immer auf dieselbe Antwort: die Syntax von "meinem" Ausdruck ist grundsätzlich korrekt. Ich hab ihn jetzt zwar noch etwas abgespeckt auf /\d{1,3}\.\d{2,3}/; , aber das ändert nicht an der Tatsache, dass die obere Grenze von 3 ignoriert wird....
                      Zuletzt geändert von philippCH; 05.10.2005, 19:20.

                      Kommentar


                      • #12
                        du hast etwas wichtiges vegessen.

                        http://regexp-evaluator.de/tutorial-...tml#zirkumflex und http://regexp-evaluator.de/tutorial-...en.html#dollar (danke, derHund)

                        damit schließst du die möglichkeit aus, dass vor und nach dem richtigen ausdruck noch andere zeichen stehen können, denn "11110,95222" ist von deinem aktuellen code schon mal validiert.

                        Kommentar


                        • #13
                          ....denn "11110,95222" ist von deinem aktuellen code schon mal validiert
                          Das hab ich auch schon festgestellt.

                          Wie das ^-Zeichen bzw. das $-Zeichen im Zusammenhang mit einem definierten String funktioniert ist mir klar, aber wie ich das auf \d anwenden soll nun gar nicht.

                          Wahrscheinlich stell ich mich für euch nun zu blöd an, aber ich hab echt keinen Plan wie ich diese regulären Ausdrücke handhaben soll. Beschäftige mich ja auch seit gerademal 3 Stunden damit.

                          Entweder meldet mir das Script bei 1.22 schon einen Fehler, oder es akzeptiert eben auch überlange Angaben.

                          So oder so geh mach ich jetzt endlich Feierabend und geh nach Hause.

                          Kommentar


                          • #14
                            Warum kann ich also mit /(\d){1,3}\.(\d){2,3}/...
                            Und wenn du das so schreibst ?
                            Code:
                            /\b\d{1,3}\.\d{2,3}\b/
                            \b sollte dafür sorgen, dass der Treffer an einer Wortgrenze liegen muss --> davor keine Zeichen mehr und dahinter auch ned. Für Strings funzt das sicher, für die Prüfung von Zahlen habe ich das noch nie probiert.
                            Müsste aber auch funzen. Probiers halt...
                            Gruss

                            tobi
                            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                            Kommentar


                            • #15
                              hint:

                              Code:
                              /foo/
                              trifft zu auf "barfoobar",
                              trifft zu auf "foo"
                              Code:
                              /^foo$/
                              trifft nicht zu auf "barfoobar",
                              trifft zu auf "foo"

                              edit: tobi hat's auch auf den punkt gebracht, nur ist meine version noch etwas "strenger".

                              Kommentar

                              Lädt...
                              X