kostenloser Webspace werbefrei: lima-city


String auf Zeichengebung prüfen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    das-koenigreich

    das-koenigreich hat kostenlosen Webspace.

    Hi, ich will ein String auf die Zeichen, die darin geprüft werden prüfen. Das selbe auch mit einer Zahl. Bei der Zahl kann ich ja einfach prüfen:
    if($var==(int) $var) {
    // mach was
    } else {
    die();
    }


    Aber wie mache ich das mit den Strings? Sie sollen folgende Werte enthalten dürfen, alles andere muss weg:
    a-z
    A-Z
    0-9
    -
    _


    Punkte, Kommas, Shlas und vorallem auch Hexadezimale Zeichen müssen weg.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Das geht mit der preg_match() funktion.
    http://de3.php.net/manual/de/function.preg-match.php

    dafür musste dann halt eine regex formulieren und übergeben. Kann dir da auch nicht weiterhelfen da RegEx nicht meine Stärke ist =/
  4. Autor dieses Themas

    das-koenigreich

    das-koenigreich hat kostenlosen Webspace.

    myhead schrieb:
    Das geht mit der preg_match() funktion.
    http://de3.php.net/manual/de/function.preg-match.php

    dafür musste dann halt eine regex formulieren und übergeben. Kann dir da auch nicht weiterhelfen da RegEx nicht meine Stärke ist =/


    Die Funktion kenne ich, aber ich kenne mich nicht mit Regex aus. Deswegen habe ich ja gefragt.
  5. if($var==(int) $var) {

    Riskant. PHP hat eine Menge an implicit type-casts drinne, dass du dich darauf nicht verlassen solltest. Nutzte stattdessen is_numeric().

    Der RegExp wäre:
    preg_match('/^[A-Za-z0-9-_]+$/', ...);

    Für mindestens eines dieser Zeichen.
  6. Autor dieses Themas

    das-koenigreich

    das-koenigreich hat kostenlosen Webspace.

    nikic schrieb:
    if($var==(int) $var) {

    Riskant. PHP hat eine Menge an implicit type-casts drinne, dass du dich darauf nicht verlassen solltest.

    Aber ich prüfe doch, ob der Ursprungswert mit dem auf int gesetzten Wert über ein stimmt.


    nikic schrieb:
    Nutzte stattdessen is_numeric().

    Das geht nicht. Hexadazimale Zahlen werden weiterhin elraubt sein. Es muss Integrar sein. Also es sind keine Komma-Zahlen, die Zahl ist am kleinesten bei 1 (also immer positiv), und am höchsten bei ca. 2000.


    nikic schrieb:
    Der RegExp wäre:
    preg_match('/^[A-Za-z0-9-_]+$/', ...);

    Für mindestens eines dieser Zeichen.

    Ist es normal, dass mir nur 1 oder 0 zurück geliefert wird?
  7. das-koenigreich schrieb:
    nikic schrieb:
    Der RegExp wäre:
    preg_match('/^[A-Za-z0-9-_]+$/', ...);

    Für mindestens eines dieser Zeichen.

    Ist es normal, dass mir nur 1 oder 0 zurück geliefert wird?


    Ja, wenn ein gewünschtes Zeichen gefunden wird gibt die Funktion 1(true) zurück und im anderen Fall 0 (false). Auch nachzulesen hier: http://php.net/manual/de/function.preg-match.php

    Beitrag zuletzt geändert: 21.11.2009 12:06:02 von karpfen
  8. Autor dieses Themas

    das-koenigreich

    das-koenigreich hat kostenlosen Webspace.

    Und es wird zwangläufig 0 zrück gegeben, falls irgentwo ein nicht-Buchstabe, oder eine nicht-Zahl ist?

    Kann man es auch noch so machen, dass höchstens 2 Ziffern vorkommen dürfen? Eventuell in einer 2. Abfrage?
  9. Aber ich prüfe doch, ob der Ursprungswert mit dem auf int gesetzten Wert über ein stimmt.

    Oh, da kennst du PHP schlecht :D

    Seh dir das an:
    if((string) '0XBAD' == (string) '2989')
    {
    echo "PHP suckz";
    }
    else
    {
    echo "PHP rulez";
    }

    Das gibt "PHP suckz" aus. Auch wenn du so gesehen einen expliziten type-cast machst, dann macht PHP noch einen impliziten in einen Integer. Auf sowas sollte man sich bei PHP nicht verlassen.

    Wenn du nur Ints haben willst, dann kannst du mit ctype_digit() prüfen (oder natürlich auch mit RegExp.)

    Zu der Sache mit maximal zwei Zahlen: Kannst du mal die genauen Anforderungen schreiben? Also wo darf was stehen. Dann können wir dir einen RegExp zusammenstellen.
  10. Autor dieses Themas

    das-koenigreich

    das-koenigreich hat kostenlosen Webspace.

    nikic schrieb:
    Seh dir das an:


    Da mache ich einfach
    if((string) '0XBAD' === (string) '2989')
    {
    echo "PHP suckz";
    }
    else
    {
    echo "PHP rulez";
    }

    draus, und es funktioniert.



    nikic schrieb:
    Zu der Sache mit maximal zwei Zahlen: Kannst du mal die genauen Anforderungen schreiben? Also wo darf was stehen. Dann können wir dir einen RegExp zusammenstellen.

    - ein String
    - maximal 10 Zeichen
    - davon maximal 2 Zahlen (wenn es einfacher wird, mach 10 Buchstaben, und 2 Zahlen draus, dann sind halt 12 möglich)
    - keine anderen Zeichen, außer Buchstaben und Zahlen
    - die Zahlen dürfen überall stehen
    - der String darf auch nur aus Buchstaben bestehen
    - der Sting muss mindestens 3 Zeichen lang sein
  11. Ja, das === würde gehen. Ich möchte damit nur sagen, dass man sich in PHP auf type-casts nicht verlassen soll, insbesondere, wenn es eine sicherheitsrelevante Frage ist.

    Für das was du willst bräuchte man meines Erachtens zwei reguläre Ausdrücke:
    /^[A-Za-z0-9]{3,10}$/
    /^[^0-9]*[0-9]?[^0-9]*[0-9]?[^0-9]*$/

    Obwohl ich beim zweiten auch nicht sicher bin, ob das gehen würde... (warum willst du das überhaupt auf zwei Zahlen beschränken?)

    Effektiver würdest du das mit den zwei Zahlen machen, indem du die einzelnen Zeichen durchgehst und checkst ob sie eine Zahl sind.
  12. Autor dieses Themas

    das-koenigreich

    das-koenigreich hat kostenlosen Webspace.

    Danke für die Codes, ich werde sie gleich testen!


    nikic schrieb:
    Effektiver würdest du das mit den zwei Zahlen machen, indem du die einzelnen Zeichen durchgehst und checkst ob sie eine Zahl sind.

    Das hatte ich ursprünglich vor, aber mir hat jemand geraten, das mit preg_match zu machen, da es schneller ausführbar ist, vorallem, wenn sehr viele auf dem Server sind.
  13. *push*, damit User Thread weiter führen kann.

    Beitrag zuletzt geändert: 6.12.2009 15:32:53 von nikic
  14. Autor dieses Themas

    das-koenigreich

    das-koenigreich hat kostenlosen Webspace.

    Hi, ich bins nochmal, ich bräuchte noch einen weiteren Code, da ich gemerkt habe, dass der alte nichts bringt. Also er funktioniert schon, nur passt er nicht, ich habe etwas vergessen.

    Folgende Zeichen sollen jetzt erlaubt sein, und zwar überall in der Zeichenkette:
    - kleine Buchstaben
    - große Buchstaben
    - Zahlen
    - Punkte
    - Leerzeichen

    Es währe schön, wenn ihr mir noch schnell den Regex geben könntet, falls Fragezeichen und Ausrufezeichen auch erlaubt sein sollen, das überlege ich mir nämlich grade noch.

    Beitrag zuletzt geändert: 8.12.2009 17:24:09 von das-koenigreich
  15. /^[a-zA-Z0-9. ]{min,max}$/

    /^[a-zA-Z0-9. !?]{min,max}$/


    Ziemlich trivial ;)
  16. Autor dieses Themas

    das-koenigreich

    das-koenigreich hat kostenlosen Webspace.

    nikic schrieb:
    /^[a-zA-Z0-9. ]{min,max}$/

    Soll bei "min" und "max" ein Wert hin, oder gehört das so?
  17. Jops, da soll die Anzahl der minimalen / maximalen Zeichen hin. Wenn du beliebig viele Zeichen (mindestens 1) haben willst, ersetze {min,max} durch +. Wenn du nur eine Mindestanzahl haben willst, dann nutze {min,}
  18. Autor dieses Themas

    das-koenigreich

    das-koenigreich hat kostenlosen Webspace.

    Es dürfen beliebig viele Zeichen sein. 0 Zeichen oder 1.000. Das soll egal sein. Gibt das auch 1 zurück, wenn ich einen leeren String sende, und soll ich "+" schreiben oder "{+}"?
  19. Aso, wenn auch 0 Zeichen okay sind, dann mach es so:
    /^[a-zA-Z0-9. ]*$/

    /^[a-zA-Z0-9. !?]*$/

    * steht für {0,}, also mindestens 0, maximal unendlich Zeichen. Das wird dir also auch bei einem leeren String ein true geben ;)

    Beitrag zuletzt geändert: 8.12.2009 20:14:39 von nikic
  20. Autor dieses Themas

    das-koenigreich

    das-koenigreich hat kostenlosen Webspace.

    Vielen Dank! Was mich wundert: Das 3. letzte Zeichen war vorher ein +, und du hast ein * draus gemacht. Welchen Unterscheid macht das? Und: könntest du Bindestriche und Unterstriche auch zulassen?
  21. + steht für {1,}
    * steht {0,}
    Also, es ändert nur, ob du auch leere Strings akzeptierst.

    Binde- und Unterstriche fügst du einfach hinten in die Klammer ein:
    /^[a-zA-Z0-9. !?-_]*$/
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!