Hendrik: Regulärer Ausdruck Ziffernüberprüfung

Hey!

Ich möchte eine Funktion schreiben, die prüft, ob die übergebene Variable nur Ziffern und keine Buchstaben beinhaltet. Eigentlich vollkommen simpel, oder?! Allerdings komme ich mit regulären Ausdrücken noch nicht so wirklich klar. Bitte helft mir. Das war mein Ansatz:

  
function nummer (variable) {  
  var Ausdruck = /[0-9]/;  
     if (Ausdruck.exec(variable) == true) {  
  return true;  
     }  
     else return false;  
}  

Hendrik

--
-------------------
Zur Info: Ich habe leider nur PHP 4.4.7 und MySQL 4.1.22 zur Verfügung!
-------------------
ie:% fl:| br:> va:) ls:[ fo:) rl:( n4:° ss:| de:> js:| ch:? sh:( mo:) zu:)
SELFCode Decoder
  1. Hallo,

      
    function nummer (variable) {  
      
         return /^[\d]+$/.exec(variable);  
    }
    

    ^      = Anfang
    [\d]+  = eine oder mehrere Ziffern (d für engl. digits)
    $      = Ende

    Das gibt ein Array oder null zurück. Wenn du true/false zurückgeben willst, dann so:

      
    return /^[\d]+$/.exec(variable) ? true : false;
    

    Die Variable ausdruck brauchst du eigentlich nicht. Da du den Ausdruck nur ein einziges mal verwendest. kannst du ihn auch direkt notieren.

    Gruß, Don P

    1. @@Don P:

      Wenn du true/false zurückgeben willst, dann so:

      Nö.

      return /^[\d]+$/.exec(variable) ? true : false;

      Die Variable ausdruck brauchst du eigentlich nicht.

      Ebensowenig die Fallunterscheidung.

      Live long and prosper,
      Gunnar

      --
      „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
      1. Hallo,

        @@Don P:

        Wenn du true/false zurückgeben willst, dann so:

        Nö.

        Warum nö?
        Falls das Script irgendwo zufällig mit if (nummer(variable)===true)... abfragt (macht zwar wenig Sinn, aber man kann ja nie wissen wie umfangreich es ist und woher es stammt), funktioniert deine Version nicht mehr.

        Gruß, Don P

    2. Hey!

      ^      = Anfang
      [\d]+  = eine oder mehrere Ziffern (d für engl. digits)
      $      = Ende

      Vielen Dank euch zwei. Sag ich ja, bin nicht fitt in regulären Ausdrücken, obwohl das nun wirklich ein sehr einfaches Beispiel war, oder?! Jetzt geht es, und auf 1 Zeile verkürzt, super!

      Hendrik

      --
      -------------------
      Zur Info: Ich habe leider nur PHP 4.4.7 und MySQL 4.1.22 zur Verfügung!
      -------------------
      ie:% fl:| br:> va:) ls:[ fo:) rl:( n4:° ss:| de:> js:| ch:? sh:( mo:) zu:)
      SELFCode Decoder
      1. Hallo,

        Vielen Dank euch zwei. Sag ich ja, bin nicht fitt in regulären Ausdrücken, obwohl das nun wirklich ein sehr einfaches Beispiel war, oder?!

        Ja, erfrischend einfach. Eigentlich brauchst du dafür auch die eckigen Klammern nicht. Die sind nur für Zeichenklassen, also wenn mehrere Zeichen gemeint sind wie in [0-9] oder ausführlicher in [0123456789].

        /^\d+$/ tut's also auch.

        Oder, wenn du Whitespace (Leerzeichen, Tabulatoren, Zeilenumbruch) am Anfang und/oder am Ende des Nummernstrings zulassen kannst, tut's auch

        return !isNaN(variable) // ergibt true falls Nummer, sonst false

        Gruß, Don P

        1. @@Don P:

          Oder, wenn du Whitespace (Leerzeichen, Tabulatoren, Zeilenumbruch) am Anfang und/oder am Ende des Nummernstrings zulassen kannst, tut's auch

          return !isNaN(variable) // ergibt true falls Nummer, sonst false

          Argl, das sollte sicher die erste Wahl vor der Anwendung eines regulären Ausdrucks sein.

          BTW, http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#is_nan@title=isNaN() lässt auch Vorzeichen zu. Und einmal [eE][+-]? innerhalb (fehlt in SELFHTML [TICKET436]).

          Live long and prosper,
          Gunnar

          --
          „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
        2. Hallo,

          Oder, wenn du Whitespace (Leerzeichen, Tabulatoren, Zeilenumbruch) am Anfang und/oder am Ende des Nummernstrings zulassen kannst, tut's auch
          return !isNaN(variable) // ergibt true falls Nummer, sonst false

          ja, das gibt aber auch true, wenn beispielsweise ein führendes Plus- oder Minuszeichen im String vorkommt, oder wenn zwischen den Ziffern ein Punkt auftaucht, oder bei so lustigen Ausdrücken wie "0x1B4F" oder "6E-4". Die Bedingung "nur Ziffern" ist damit also nicht mehr erfüllt.

          Ciao,
           Martin

          --
          Funktion und Referenz auf diese sind mir bekannt, mit Zeigern kann ich nicht viel mehr anfangen, als damit auf Buttons zu klicken.
            (Ashura)
          1. Hallo,

            ja, das gibt aber auch true, wenn beispielsweise ein führendes Plus- oder Minuszeichen im String vorkommt, oder wenn zwischen den Ziffern ein Punkt auftaucht, oder bei so lustigen Ausdrücken wie "0x1B4F" oder "6E-4". Die Bedingung "nur Ziffern" ist damit also nicht mehr erfüllt.

            Sogar für "0x1B4F"? Das wusste ich gar nicht, ist ja richtig mächtig, dieses isNaN(). Sehe gerade: Mit Number("0x1B4F") bekommt man sogar den Dezimalwert, bin beeindruckt.

            @Gunnar:

            Das sollte man bei Number() auch noch erwähnen. Der + Operator kann das übrigens auch:

            +"0x1B4F" === Number("0x1B4F");
            -"0x1B4F" === Number("-0x1B4F");

            usw.

            Ich glaube, die Operatoren + und - vor Strings arbeiten sogar *genau* wie Number().

            Wisst du das im Ticket noch ergänzen oder müsste man dafür neue aufmachen? Ich kenne mich mit dem Ticket-System gar nicht aus. Darf da jeder mitmachen?

            Gruß, Don P

            1. @@Don P:

              Ich glaube, die Operatoren + und - vor Strings arbeiten sogar *genau* wie Number().

              Ob molily dir „ich glaube“ durchgehen lässt?

              Ich kenne mich mit dem Ticket-System gar nicht aus. Darf da jeder mitmachen?

              Na sicher. Dafür isses ja da.

              Live long and prosper,
              Gunnar

              --
              „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
  2. @@Hendrik:

    function nummer (variable) {
      var Ausdruck = /[0-9]/;

    Schau nochmail in [http://de.selfhtml.org/javascript/objekte/regexp.htm@title=SELFHTML] nach, wie der Ausdruck lauten muss, wenn du nicht nur eine, sondern beliebig viele Ziffern erkennen willst. Hier noch passender: beliebig viele, aber mindestens eine.

    if (Ausdruck.exec(variable) == true) {
      return true;
         }
         else return false;

    Was soll das? Dafür kannst du gleich schreiben:
    return Ausdruck.exec(variable);

    Und BTW, ich würde schreiben:
    return variable.match(Ausdruck);
    [</archiv/2008/3/t167751/#m1094554>]

    Live long and prosper,
    Gunnar

    --
    „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)