Mindgap: Regulärer Ausdruck Problem!

Hi,

ich habe ein kleines Problem. Ich möchte ein Textfeld mit einem Regulären Ausdruck validieren. Es dürfen folgende Daten eingegeben werden:

123 KB
  23 KB  usw....

Mein Regulärer Ausdruck hierfür lautet: [1]?[0-9]?[.]?[0-9]?\s([MK]{1}[B]{1})$ und funktioniert auch soweit.

Jetzt möchte ich aber auch, das ich in das Textfeld einfach kein Zeichen eintragen kann. Soll bedeuten, in dem Textfeld soll entweder nichts oder z.B. 120 KB stehen.

Ist das irgendwie machbar?

Ich habe schon mit der ODER Funktion rumgespielt aber nichts wirklich funktionierendes gefunden.

Gruß,
Michael


  1. 0-9 ↩︎

  1. hi,

    Es dürfen folgende Daten eingegeben werden:

    123 KB
      23 KB  usw....

    Mein Regulärer Ausdruck hierfür lautet: [1]?[0-9]?[.]?[0-9]?\s([MK]{1}[B]{1})$ und funktioniert auch soweit.

    Jetzt möchte ich aber auch, das ich in das Textfeld einfach kein Zeichen eintragen kann. Soll bedeuten, in dem Textfeld soll entweder nichts oder z.B. 120 KB stehen.

    Ist das irgendwie machbar?

    WENN textfeldinhalt LEER ODER PRUEFUNG MIT regulärem ausdruck WAHR
      DANN ok
      SONST hoellisch_schmerzhafte_bestrafung

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }

    1. 0-9 ↩︎

    1. Hi

      WENN textfeldinhalt LEER ODER PRUEFUNG MIT regulärem ausdruck WAHR
        DANN ok
        SONST hoellisch_schmerzhafte_bestrafung

      Gibts da auch nen Code für? WENN textfeldinhalt LEER ODER ???

      Gruß,
      Michael

      1. Hallo Michael,

        WENN textfeldinhalt LEER ODER PRUEFUNG MIT regulärem ausdruck WAHR
          DANN ok
          SONST hoellisch_schmerzhafte_bestrafung

        Gibts da auch nen Code für? WENN textfeldinhalt LEER ODER ???

        Ja, mit Sicherheit sogar ;-) frägt sich nur in welcher Programmiersprache?
        in JS zB.:
        if (eingabe.value == "" || meinRegExTest(eingabe.value))

        (Was wahsaga meinte ist imho, dass es einfacher ist, nicht alles im RegEx zu lösen, sondern die Aufage aufzuteilen.)

        viele Grüße

        Michael

        1. Hi

          Ja, mit Sicherheit sogar ;-) frägt sich nur in welcher Programmiersprache?
          in JS zB.:
          if (eingabe.value == "" || meinRegExTest(eingabe.value))

          (Was wahsaga meinte ist imho, dass es einfacher ist, nicht alles im RegEx zu lösen, sondern die Aufage aufzuteilen.)

          Ja, das kann sein. Jedoch habe ich das Problem, dass ich nur den RegEx Ausdruck an sich eingeben kann. Somit fallen also Angaben wie If usw. leider raus.

          1. hi,

            Ja, das kann sein. Jedoch habe ich das Problem, dass ich nur den RegEx Ausdruck an sich eingeben kann. Somit fallen also Angaben wie If usw. leider raus.

            Ausdruck klammern, und mit einem Oder mit "Nichts" verbinden?

            ^(|([0-9]?[0-9]?[.]?[0-9]?\s([MK]{1}[B]{1})))$

            Liefert bei Auswertung mittels preg_match in PHP für '23 KB' und '' true, für 'x' bspw. false.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
          2. Hallo,

            Ja, das kann sein. Jedoch habe ich das Problem, dass ich nur den RegEx Ausdruck an sich eingeben kann. Somit fallen also Angaben wie If usw. leider raus.

            Dann wirds schwieriger.
            Zunächst mal ne Kleinigkeit, dass Dein Ausdruck leichter zu lesen wird: ^\d{1,3} matched Dir 1-3 Ziffern; ((M|K)B) matched MB od. KB.
            Der komplette Ausdruck wäre dann ^\d{1,3}\s((M|K)B)

            Für das eigentliche Problem brauchst Du dann aber keine Alternative (|) sondern einen konditionalen Ausdruck und eine Assertion, ich glaube, so könnte es funktionieren:
            (?(?=(.+))(^\d{1,3}\s((M|K)B))|())

            Zur Erklärung:
            (? legt den konditionalen Ausdruck fest, es wir gefolgt von der Bedingung: (?=(.+)) ist eine vorwärtsblickende Assertion (wenn ein oder mehrere beliebige Zeichen kommen, dann...)
            nun folgen die beiden Alternativen wenn die Bedingung erfüllt ist: ^\d{1,3}\s((M|K)B) wenn nicht einfach nur ().

            Greets

            Michi

            1. DANKESCHÖN!

              Damit wäre das Problem gelöst und ich ein stückchen weiter bei meiner Arbeit!

              Ihr seid die Besten!

              Gruß,
              Michael

  2. gudn tach!

    ich habe ein kleines Problem. Ich möchte ein Textfeld mit einem Regulären Ausdruck validieren. Es dürfen folgende Daten eingegeben werden:

    123 KB
      23 KB  usw....

    Jetzt möchte ich aber auch, das ich in das Textfeld einfach kein Zeichen eintragen kann.

    /^(?:\d{1,3} [MK]B)?$/

    oder mit fuehrenden spaces

    /^(?: +\d{1,3} [MK]B)?$/

    \s wuerde ich hier nicht verwenden, da das z.b. auch tabs (haeufiger copy&paste-fehler) zulaesst.

    ferner gibt es bzgl. der praefixe standards, die es einem leichter machen, genauere informationen zu uebermitteln. es gibt z.b. kB fuer 1000 byte und KiB fuer 1024 byte.

    also z.b.

    /^(?: +\d{1,3} (?:k|[KMGT]i?)B)?$/

    prost
    seth