Jörk: variable auf zahlen mit reg ausdrücken überprüfen

hi,

ich versuche schon die ganze zeit eine variable auf zahlen zu überprüfen aber irgendetwas mache ich falsch.

die variable darf nur aus den zahlen 1 3 8 und 10 bestehen.

if($var !~ /[1]?$/) {}

was mache ich flasch??


  1. 138(10) ↩︎

  1. Hallo,

    if($var !~ /[1]?$/) {}

    ^
    1,3,8,10 sind also optional, dH es wird auch WAHR zurückgeliefert, wenn 1,3,8,10 nicht enthalten sind. ich weiß zwar nicht genau, was du erreichen willst, aber ich würde sagen, du solltest das ? durch ein + ersetzen. Andernfalls wird nur WAHR zurückgeliefert, wenn $var aus einem Zeichen besteht.

    Markus.


    1. 138(10) ↩︎

    1. Hello,

      if($var !~ /[1]?$/) {}
                               ^
      1,3,8,10 sind also optional, dH es wird auch WAHR zurückgeliefert, wenn 1,3,8,10 nicht enthalten sind. ich weiß zwar nicht genau, was du erreichen willst, aber ich würde sagen, du solltest das ? durch ein + ersetzen. Andernfalls wird nur WAHR zurückgeliefert, wenn $var aus einem Zeichen besteht.

      Wenn es nicht nur zum Erlernen von Regular Expressions gedacht ist, behaupte ich, dass die hier fehl am Platz sind.

      Wenn in der Variablen nur die Werte 1, 3, 8 oder 10 drinstehen dürfen (das wäre die eine Deutung des ungwöhnlichen Sprachgebrauchs des OP), dann kann man das bestens mit switch/case abfragen. Es gibt ja nur vier erlaubte Fälle.

      Wenn natürlich gemeint war, dass die Variable nur aus den Ziffern 1, 3, 8 oder der Zahl 10 bestehen darf (denn 10 ist ja keine Ziffer), dann wäre das mit den RegExp wohl einer Lösung mit String-Set gleichzusetzen in der Last.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

      1. 138(10) ↩︎

  2. Hallo Jörk,

    die variable darf nur aus den zahlen 1 3 8 und 10 bestehen.

    if($var =~ /[1]|10$/) {
      print "Good boy!\n";
    }

    if($var !~ /[2]?$/) {}

    was mache ich flasch??

    Du hast den Begriff »Zeichenklasse« nicht verstanden. Eine Zeichenklasse
    bezeichnet einzelne Zeichen, nicht jedoch Zeichen-Ketten. [138(10)] bezeichnet
    also die Zeichen 1, 2, 8, (, 1, 0 und ).

    Grüße,
     CK

    --
    [remote-signature:http://www.defunced.de/cgi-bin/signature.pl]
    http://wwwtech.de/

    1. 138 ↩︎

    2. 138(10) ↩︎