martin: RegEx, der nur auf Zahlen paßt

hallo alle zusammen,

ich schlage mir hier die ganze zeit mit eine RegEx rum,
der zu rein numerischen string passen soll - also paßt, wenn ein übergegener string _nur_ aus zahlen besteht.

// Validiert numerische Datenfelder
  function CheckNumericalData ($argData,$argLabel,$argMinLength=1,$argMaxLength=10) {
   $pattern="/[1]{".$argMinLength.",".$argMaxLength."}$/";
   if(preg_match($pattern,$argData))
    return 1;
   else
    return $argLabel;
  } // function CheckNumData

ich kapier einfach nicht, wo hier das problem ist.
meine funktion liefert mir die ganze zeit $argLabel zurück statt ein TRUE.

kann mir da vielleicht jemand weiterhelfen?
die übergebenen werte sind völlig ok,
das passt alles !?


  1. 0-9 ↩︎

  1. Hi martin,

    ich schlage mir hier die ganze zeit mit eine RegEx rum,
    der zu rein numerischen string passen soll - also paßt, wenn ein übergegener string _nur_ aus zahlen besteht.

    Da bist du mit /[1]{1,10}$/ schon ganz richtig. Statt [0-9] könntest du aber auch \d verwenden.

    $pattern="/[2]{".$argMinLength.",".$argMaxLength."}$/";

    Hier solltest du mal noch zum Testen ein echo $pattern; oder so etwas einfügen um zu kontrollieren, ob der RegEx richtig zusammengeseztt wird.

    ich kapier einfach nicht, wo hier das problem ist.
    meine funktion liefert mir die ganze zeit $argLabel zurück statt ein TRUE.

    Deine Funktion liefert auch nicht true sondern 1 zurück - wenn du mit dem === Operator arbeitest, ist das ein Unterschied.

    kann mir da vielleicht jemand weiterhelfen?

    PHP kennt für eine Überprüfung auf Zahlen die Funktion is_numeric().

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
    Schon gewusst, dass Bugs und Feature Vorschläge für das CForum ins Entwicklerforum oder in den BugTracker von WWWTech gehören und nicht hier her?

    1. 0-9 ↩︎

    2. 0-9 ↩︎

  2. AAAARGH!!!

    mann, sowas dämliches.
    mein regex und alles andere klappt wunderbar.
    trotzdem vielen dank für deine hilfe...

    ich fürchte nur, daß war nicht problem.
    mein problem war die eigene blindheit.

    ich übergebe eine Variable in einem Formular:
    $_POST['bid'] => vom engl. "bid" wie "Gebot".

    was verarbeite ich Volldepp weiter?
    $_POST['bit'] => wie das "Bit" in der Bitburger Werbung.

    Mann, ehrlich - das hat mich jetzt ne halbe stunde gekostet.
    So ein Sch... ;-)

    Grüße,
    Martin

    1. echo $begrüßung;

      Mann, ehrlich - das hat mich jetzt ne halbe stunde gekostet.

      Mit error_reporting = E_ALL wäre das nicht passiert.

      echo "$verabschiedung $name";

  3. if(preg_match($pattern,$argData))
        return 1;
       else
        return $argLabel;
      } // function CheckNumData

    meine funktion liefert mir die ganze zeit $argLabel zurück statt ein TRUE.

    ganz einfach: es 'matcht' nicht -> else wird ausgeführt.
    echo mal das $pattern, vielleicht stimmt da was nicht

    du kannst das aber auch ohne regex machen, zb:
    function checkNumericalData(...)
    {
    if(!is_numeric($argData))
       return false; //die funktion wird dann beendet
    if($argData < $argMinLength or $argData < $argMaxLength)
       return false;
    return true; // wird nur aufgerufen wenn nicht vorher schon returnt wurde
    }

    Kleiner Tipp am Rande: du kannst statt
      $pattern="/[1]{".$argMinLength.",".$argMaxLength."}$/";
    auch einfach
      $pattern="/[2]{$argMinLength,$argMaxLength}$/";
    schreiben, das erkennt php automatisch (nur bei "-anführungszeichen, nicht bei ')


    1. 0-9 ↩︎

    2. 0-9 ↩︎