manfred: in string dürfen nur folgende zeichen auftreten: -/012345

Hallo,

ich möchte prüfen, ob ein String nur aus 012345-/ besteht.

Dachte zuerst an einen regulären Ausdruck, aber /[012345-/]/ liefert natürlich nicht das richtige ergebnis.

Wie kann ich mein Vorhaben bewerkstelligen?

Gruß

  1. ich möchte prüfen, ob ein String nur aus 012345-/ besteht.
    Dachte zuerst an einen regulären Ausdruck, aber /[012345-/]/ liefert natürlich nicht das richtige ergebnis.
    Wie kann ich mein Vorhaben bewerkstelligen?

    In dem du die Frage beantwortest:
    Wenn der String ein Zeichen enthält, das nicht 012345-/ ist, dann ist es ein böser Input.
    Wie man Zeichenklassen negiert, weisst du?

    mfg Beat

    --
    Woran ich arbeite:
    X-Torah
    ><o(((°>      ><o(((°>
       <°)))o><                      ><o(((°>o
  2. Dachte zuerst an einen regulären Ausdruck, aber /[012345-/]/ liefert natürlich nicht das richtige ergebnis.

    Was hälst du davon hinter die eckige Klammer noch ein + zu setzen. Dein String besteht ja vermutlich nicht nur aus *einem* Zeichen, oder?
    Willst du damit auf eine richtige Telefonnummer testen? Dann solltest du den regulären Ausdruck vielleicht noch etwas konkretisieren, denn so geht ja z.B. auch "-319/5-" als gültiger String durch.
    Christian.

  3. Hallo Manfred,

    Dachte zuerst an einen regulären Ausdruck, aber /[012345-/]/ liefert natürlich nicht das richtige ergebnis.

    Ist ja schon fast richtig.
    Wähle einen Delimiter der nicht als Zeichen vorkommt, dann musst Du nicht escapen.
    Also zum Beispiel "#" ...

    #[012345-/]#

    der "-" muss/sollte bei Aufzählung am Ende stehen wenn er literal gemeint ist ...

    #[012345/-]#

    wenn der gesamte zu prüfende String passen soll musst Du das Muster verorten

    vom Anfang ...

    #[1]#

    bis zum Ende ...

    #[2]$#

    dann fehlt ein Quantifier, sofern mehr als ein Zeichen möglich ist, also ...

    #[3]+$#

    kann man auch noch ein wenig kürzer formulieren ...

    #[4]+$#

    so ungefähr jedenfalls müsste es passen.

    Viele Grüße

    Stefan

    --
    bythewaythewebsuxgoofflineandenjoytheday

    1. 012345/- ↩︎

    2. 012345/- ↩︎

    3. 012345/- ↩︎

    4. 0-5/- ↩︎

    1. Hallo,

      vielen Dank für die Ausführungen, RegEx waren mir schon immer fremd, und da ich Sie so selten benötige habe ich mich noch nie wirklich eingearbeitet.

      Wenn ich das ganze jetzt ausfeilen möchte.

      String muss

      • mit [0-9] beginnen
      • darf dann * Zeichen [0-9/-] haben
      • darf aber nicht mit [/-] enden
      • darf nicht [/-] 2mal direkt hintereinander haben

      Ersten und Zweiten Punkt bekomme ich mit #[1]{1}[0-9/-]*$# hin.

      Doch wie müsste ich die letzten Zwei Punkte realisieren?

      Gültig wären:
      1-2-3/5
      123421
      1
      Ungültig:
      -12121-5
      -12121-4-
      21-/21

      Den letzten Punkt könnte ich durch negieren hinbekommen von [/-] doch irgendwie fehlt mir der korrekte Ansatz.

      Für den dritten Punkt fehlt mir gänzlich die Idee.

      Gruß


      1. 0-9 ↩︎

      1. Hallo Manfred,

        vielleicht passt folgende Formel:

        ^ Zahl+ (Trennzeichen{1} Zahl+)* $

        Also am Anfang eine Folge von Zahlen (mindestens eine).
        Optional kann ein Block mit einer Abfolge von genau einem Trennzeichen und mindestens einer weiteren Zahl angeschlossen werden.
        Dieser letzte Block kann beliebig oft wiederholt werden.

        Viele Grüße

        Stefan

        --
        bythewaythewebsuxgoofflineandenjoytheday
        1. gudn tach!

          ^ Zahl+ (Trennzeichen{1} Zahl+)* $

          perfekt. in regexp waere das ~^\d+(?:[/-]\d+)*$~.

          in neueren php-versionen gibt's auch atomic grouping, was zumindest bei langen strings einen geschwindigkeitsvorteil bringen sollte. hab damit noch nicht so viel rumgespielt, aber ich denke es muesste dann
            ~^(?>\d+(?:[/-]\d+)*)$~
          heissen.

          prost
          seth

      2. Hi,

        String muss

        • mit [0-9] beginnen
        • darf dann * Zeichen [0-9/-] haben
        • darf aber nicht mit [/-] enden
        • darf nicht [/-] 2mal direkt hintereinander haben

        Du möchtest also tatsächlich Telefonnummern prüfen?
        Und dabei viele gültige Angaben als fehlerhaft verwerfen wie z.B. +49 211 346008 oder (0211) 346008?
        Mal ein kleiner Ansatz für Dich, den Du nur noch für die letzte Bedingung erweitern müsstest:
        ^((\+[0-9]{2,4}( [0-9]+? | ?\([0-9]+?\) ?))|(\(0[0-9 ]+?\) ?)|(0[0-9]+?( |-|\/)))[0-9]+?[0-9 \-\/]*[0-9]$

        freundliche Grüße
        Ingo