Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Regular expressions

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Regular expressions

    Hi,

    iich möchte prüfen ob nur die Tage eines Monats eingegeben wurden (von 1 bis 31)
    wie kann ich es mit preg_match() machen?

    So sieht mein Code aus aber es funktioniert nicht.
    PHP-Code:
    if (preg_match '/^([1-31])$/i'$execTime )) {


    Grüße
    Aha


  • #2
    Dein Code kann so nicht funktionieren, weil reguläre Ausdrücke nur auf Zeichen und deren Vorkommen prüfen und du gleich eine "Zeichenfolge" angegeben hast. Besser Audrücken kann ich mich gerade nicht...

    In deinem Code möchtest du prüfen, ob ein Zeichen 1 bis 31 eingegeben wurde,...
    PHP-Code:
    if( preg_match '/^([1-31])$/i'$execTime ) ) { ... } 
    ...aber du musst jedes Zeichen einzeln prüfen:
    PHP-Code:
    if( preg_match '/^([0-9][0-9])$/i'$execTime ) ) { ... } 
    Mit dem Code werden alle Zeichenfolgen von 00 bis 99 akzeptiert und du kannst/musst dieses Muster für dein Beispiel anpassen!
    Außerdem wirst du das Fragezeichen (?) nutzen müssen, welches ein Zeichen/eine Zeichenfolge optional macht:
    PHP-Code:
    if( preg_match '/^([0-9]?[0-9])$/i'$execTime ) ) { ... } 
    Mit dem Code werden alle Zeichenfolgen von 0 bis 99 akzeptiert, weil das erste zeichen nicht oder einmal vorkommen kann/muss.

    Viel Spaß beim basteln, weil reguläre Ausrücke selbst bauen bringt mehr als zukopieren, weil man das Verständnis dafür bekommen sollte... =)

    Kommentar


    • #3
      Richtig. Im Zusammenhang mit Daten (Datum) ist es aber sowieso besser, mit einer Datumsfunktion zu prüfen.
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        sonst könnte man ja mit
        PHP-Code:
        if (is_int($day) && $int && $int 32) { ... } 
        das ganze überprüfen ..?
        PHP-Code:
        if ( $humans >= ) {
           
        war ();

        Kommentar


        • #5
          Zitat von aha_01 Beitrag anzeigen
          Hi,

          iich möchte prüfen ob nur die Tage eines Monats eingegeben wurden (von 1 bis 31)
          Fünf Monate im Jahr haben weniger als 31 Tage. Beim Februar schwankt die Zahl sogar abhängig vom Jahr zwischen 28 und 29 ...

          wie kann ich es mit preg_match() machen?
          Kommt darauf an, in welchem Format dein Datum vorliegt. Es sollte schon eine Zeichenkette (ein String) sein.

          So sieht mein Code aus aber es funktioniert nicht.
          PHP-Code:
          if (preg_match '/^([1-31])$/i'$execTime )) {


          Grüße
          Aha
          Welchen Wert hat $execTime?
          Du solltest dich erstmal mit den Grundlagen der Regulären Ausdrücke vertraut machen, speziell dem Pattern-Matching und den Zeichenklassen. Und "/i" hat bei Ziffern so gar keinen Sinn ...

          Das Folgende käme deiner ursprünglichen Aufgabenstellung wohl am Nächsten:
          PHP-Code:
          $monat date('m');
          if (
          preg_match('/\A([012]?[0-9]|3[01])\z/'$monat))) {


          ... wenn es nicht den Februar, den April, den Juni, den September und den November gäbe ...
          Wenn man die Wurst schräg anschneidet, hält sie länger, weil die Scheiben größer sind.

          Kommentar


          • #6
            Machs einfach ohne RegExp und mit den String- und Datumsfunktionen von PHP.
            "Mein Name ist Lohse, ich kaufe hier ein."

            Kommentar


            • #7
              Danke,

              das Prpblemchen habe ich wie folgt gelöst:
              PHP-Code:
              if ((preg_match '/^M[0-9]{1,2}$/'$execTime )) && (intval substr $execTime) >= )) && (intval substr $execTime) <= 31 ))){
              ...

              Schöne Grüße
              Aha

              Kommentar


              • #8
                ??? Warum RE? Das nimmt man für "Muster". Du willst doch einfach nur nach (int) zwangscasten und auf >0 und <32 (oder je nach Monat) prüfen.

                Kommentar

                Lädt...
                X