Keine Ausgabe wenn bestimmte Zeichenfolge im String

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

  • Keine Ausgabe wenn bestimmte Zeichenfolge im String

    Hallo,

    also ich habe einen String in eine Variabel, zum Beispiel:

    $test = 'Guten Morgen';

    Jetzt habe ich 20 verschiedene Zeichenfolgen, wenn eine dieser Zeichenfolge in dem String vorkommt, dann soll er nicht ausgegeben werden.

    Die einzige Lösung die mir jetzt einfällt ist, das ich alle Zeichenfolgen die nicht vorhanden sein dürfen in ein Array packe und mit einer foreach Schleife diesen Array durchlaufe und jeden Eintrag einzeln mit strpos überprüfe...

    PHP-Code:
    foreach($verboten as $value){
     if(
    strpos($value$test) !== FALSE){
       
    $ausgabe 1;
       break;
     }
    }
    if(!isset(
    $ausgabe){
     echo 
    $test;


  • #2
    Ich würde sagen preg_match ist schneller als die Schleife.

    Kommentar


    • #3
      Also für jedne Ausdruck eine preg_match? Oder kann ich als pattern einen Array angeben?

      Kommentar


      • #4
        Du kannst die verschiedene Ausdrücke im Subpattern mit | trennen.

        Kommentar


        • #5
          du kannst aber auch diese string-ketten in ein array packen ...

          PHP-Code:
          $strings = array();
          $strings[] = 'guten morgen';
          $strings[] = 'etc.'
          mit in_array() kannst du ebenfalls prüfen, ob der string vorhanden ist und darauf reagieren.
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Da preg_match() schon erwähnt wurde, traue ich mich auch mal:

            PHP-Code:
            function has_badwords2(
              
            $badwords NULL/// LIST of badwords
              
            $haystack NULL  /// text to filter
            ) {
              static 
            $cb NULL;
              if (
            NULL === $cb) {
                
            $cb create_function('$badword''return preg_quote($badword, \'/\');');
              }
              
            $badwords '/(' implode('|'array_map($cb$badwords)) . ')/';
              return (bool) 
            preg_match($badwords$haystack);

            Im Prinzip suchst du ja nach der Vorstufe eines Badword-Filters, oder?
            Danach würde ich mal googlen -- vielleicht gibt's was Performanteres als das Zusammenkleben von Suchstrings.

            *nachschieb*

            Und hier noch die Variante mit preg_replace(). Sie nutzt ein Array als Filterliste:

            PHP-Code:
            function has_badwords(
              
            $badwords NULL/// LIST of badwords
              
            $haystack NULL  /// text to filter
            ) {
              static 
            $cb NULL;
              if (
            NULL === $cb) {
                
            $cb create_function(
                    
            '$badword',
                    
            'return \'/\A.*?\' . preg_quote($badword , \'/\') . \'.*\z/s\';'
                
            );
              }
              
            $badwords array_map($cb$badwords);
              
            $badwords[] = '/.*/';
              
            preg_replace($badwords''$haystack1$count);
              return (bool) 
            $count;

            Fehlende Backslashes sind wie immer aus der Zitat-Ansicht zu kopieren.
            Zuletzt geändert von fireweasel; 12.03.2009, 07:24.
            Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

            Kommentar

            Lädt...
            X