tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
16
ZUGRIFFE
689
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Hallo, ich sitze gerade an einer etwas schwierigeren Sache.

    Vielleicht kann mir jemand helfen?

    Ich habe eine Variable:
    PHP-Code:
    $var1 'B!MW50!0P!S'
    Nun möchte ich zwischen allen Buchstaben und Zahlen ein Sonderzeichen einfügen, jedoch sollen die Ausrufezeichen nicht gelten.

    Ich würde es zwar mit "chunk_split" machen, aber das funkioniert wegen den den Ausrufezeichen nicht.

    Das ganze soll so aussehen:
    PHP-Code:
    $var1 'B!MW50!0P!S';

    Sonderzeichen: @

    $var1 'B@!M@W@5@0@!0@P@!S';

    Zur Verdeutlichung:
    | @ | !| @ | | @ | | @ | | @ | !| @ | | @ | !
    Ich denke das ist mit PHP nicht möglich aber vielleicht hat ja jemand von euch eine Idee?
     

  2. #2
    Avatar von Raisch
    Raisch Raisch ist offline extraordinary bit
    Registriert seit
    Aug 2011
    Ort
    Berlin
    Beiträge
    333
    Mit Regulären Ausdrücken kannst Du das machen. Einen Link dazu hatte ich in deinem anderen Thread geposted.

    Gruß
     

  3. #3
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Ok. Ich kriege das aber alleine nicht hin.
     

  4. #4
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.961
    Code PHP:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    $pattern = '/([[:alnum:]])|([@])|!([[:alnum:]])/';
    $subject = 'B@!M@W@5@0@!0@P@!S';
    $result  = array();
     
    if(preg_match_all($pattern, $subject, $matches) !== false) {
      foreach($matches[1] as $i => $match) {
        if($matches[1][$i] !== '') {
          # Ziffern und Buchstaben
          $result[] = array($matches[1][$i], 0);
        } elseif($matches[2][$i] !== '') {
          # At-Zeichen
          $result[] = array($matches[2][$i], 1);
        } else {
          # Ziffern und Buchstaben mit führendem Ausrufezeichen
          $result[] = array($matches[3][$i], 2);
        }
      }
    }
    Nebenbei: Warum eröffnest du a) immer wieder neue Threads, wenn es doch immer um das gleiche Problem geht, und warum erstellst du b) keinen Thread im Jobforum, obwohl wir dir doch bisher eigentlich alles erarbeitet haben und du es danach nur noch kopieren musstest?
    Yaslaw und Alice bedanken sich. 
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  5. #5
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    @enfach nur Crack:
    Er will das Sonderzeichen einfügen - nicht entfernen.

    PHP-Code:
    $var1 'B!MW50!0P!S';

    // Pattern erstellen. Nimme soviele Nichtzahlen und NichtBuchstaben wie es hat 
    // gefolgt von einer Zahl oder einem Buchstaben
    $pattern '/([^[:alnum:]]*[[:alnum:]])/';

    preg_match_all($pattern$var1$results);

    // Und die ganze Menge wieder mit @ zusammenführen
    $newVar1 implode('@'$results[1]);

    var_dump($newVar1);

    //Ausgabe:
    // string(18) "B@!M@W@5@0@!0@P@!S" 
    Mann kann es auch mit preg_replace machen:
    PHP-Code:
    // gleicher Pattern
    $pattern '/([^[:alnum:]]*[[:alnum:]])/';
    // Ersetze jeden Fund durch Fund@
    $replace '\1@';
    $newVar1 preg_replace($pattern$replace$var1); 
    // Am Schluss vom String das überflüssige @ entfernen
    $newVar1 rtrim($newVar1'@');

    var_dump($newVar1); 
    Mit dem anderen stimme ich dir bei. Ich habe schon lange die Übersicht über bl5000 seine 5000 Threads verloren.
    Alice bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  6. #6
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Bitte seit nicht zu Streng mit mir.

    Ich habe den Thread extra erstellt, um eben die Übersichtlichkeit behalten zu können. Sorry!

    @Yaslaw:
    Danke für deinen Code. Jedoch erzeugt es bei mir ganz unterschiedliche Ausgaben.

    Beispiel:
    PHP-Code:
    $var1 'DD';

    ... 
    Dein Code...

    echo 
    $newVar1:

    Ausgabe:
    string(3"D@D" D@DDD

    Stehen sollte da eigentlich
    :
    D@
    Beispiel:
    PHP-Code:
    $var1 'F';

    ... 
    Dein Code...

    echo 
    $newVar1:

    Ausgabe:
    string(1"F" FF

    Stehen sollte da eigentlich
    :

    Beispiel:
    PHP-Code:
    $var1 'ABC';

    ... 
    Dein Code...

    echo 
    $newVar1:

    Ausgabe:
    string(5"A@B@C" A@B@CABC

    Stehen sollte da eigentlich
    :
    A@B@
    Beispiel:
    PHP-Code:
    $var1 '!AG';

    ... 
    Dein Code...

    echo 
    $newVar1:

    Ausgabe:
    string(4"!A@G" !A@G!AG

    Stehen sollte da eigentlich
    :
    !
    A@
     

  7. #7
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Welchen dein Code? Ich habe 2 Codes.

    Alle deine Beispiele funktionieren bei mir perfekt.

    Warum testest du mit einem echo und meinem var_dump()? So gibt es eine doppelte Ausgabe

    Hast du nur einfach alles kopiert ohne zu versuchen was dans ganze so im groben macht? Das du die Pattern nicht versteht ist das eine. Aber die var_dump() im Code, die solltest du schon verstehen.

    Ich habe jetzt mal alles zusammengefasst und die 2 Versionen in getrennte Funktion verpackt
    PHP-Code:
    // Meine Tests
    $testStrings = array(
            
    'B!MW50!0P!S',
            
    'DD',
            
    'F',
            
    'ABC',
            
    '!AG'
    );

    // Für jeden Teststring beide Versionen ausgeben
    foreach($testStrings AS $text){
        echo 
    "Orignaltext: {$text}<br />\n";
        echo 
    'Version 1: ' getNewTextVersion1($text) . "<br />\n";
        echo 
    'Version 2: ' getNewTextVersion2($text) . "<br />\n";
        echo 
    "<hr />\n";
    }


    function 
    getNewTextVersion1($text){
        
    // Pattern erstellen. Nimme soviele Nichtzahlen und NichtBuchstaben wie es hat 
        // gefolgt von einer Zahl oder einem Buchstaben
        
    $pattern '/([^[:alnum:]]*[[:alnum:]])/';
        
        
    preg_match_all($pattern$text$results);
        
        
    // Und die ganze Menge wieder mit @ zusammenführen
        
    return implode('@'$results[1]);
    }

    function 
    getNewTextVersion2($text){
        
    // gleicher Pattern
        
    $pattern '/([^[:alnum:]]*[[:alnum:]])/';
        
    // Ersetze jeden Fund durch Fund@
        
    $replace '\1@';
        
    $retVal preg_replace($pattern$replace$text); 
        
    // Am Schluss vom String das überflüssige @ entfernen
        
    return  rtrim($retVal'@');

    Das ergibt:

    In HTML-Ansicht:
    HTML-Code:
    Orignaltext: B!MW50!0P!S<br />
    Version 1: B@!M@W@5@0@!0@P@!S<br />
    Version 2: B@!M@W@5@0@!0@P@!S<br />
    <hr />
    Orignaltext: DD<br />
    Version 1: D@D<br />
    Version 2: D@D<br />
    <hr />
    Orignaltext: F<br />
    Version 1: F<br />
    Version 2: F<br />
    <hr />
    Orignaltext: ABC<br />
    Version 1: A@B@C<br />
    Version 2: A@B@C<br />
    <hr />
    Orignaltext: !AG<br />
    Version 1: !A@G<br />
    Version 2: !A@G<br />
    <hr />
    In Browser-Ansicht:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    Orignaltext: B!MW50!0P!S
    Version 1: B@!M@W@5@0@!0@P@!S
    Version 2: B@!M@W@5@0@!0@P@!S
     
    Orignaltext: DD
    Version 1: D@D
    Version 2: D@D
     
    Orignaltext: F
    Version 1: F
    Version 2: F
     
    Orignaltext: ABC
    Version 1: A@B@C
    Version 2: A@B@C
     
    Orignaltext: !AG
    Version 1: !A@G
    Version 2: !A@G
    Alice bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  8. #8
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Ne ich habe mir natürlich beide Codes angeschaut und die Zeile mit dem var_dump auskommentiert weil ich hier den Fehler vermutet habe.

    Mit
    PHP-Code:
    echo $Var1
    bekomme ich ja die Variabele normal angezeigt.

    Mit
    PHP-Code:
    echo $newVar1
    eben nicht.

    Wie kriege ich
    PHP-Code:
    $newVar1 
    denn "Echo-Fähig"?
    Geändert von Alice (10.02.12 um 14:29 Uhr)
     

  9. #9
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Ganz normal. Aber du hast irgendwie meinen Code irgendwohin zusammenkopiert und irgendwie angepasst und erwartest jetzt vollem Ernst, dass ich dir einfach so sagen kann was du falsch gemacht hast?

    Es ist die Zeile 42.
    timestamp bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  10. #10
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    He? ich habe nur die Zeile mit dem "var_dump" auskommentiert.

    PHP-Code:
    $var1 'B!MW50!0P!S';
    $pattern '/([^[:alnum:]]*[[:alnum:]])/';
    preg_match_all($pattern$var1$results);
    $newVar1 implode('@'$results[1]);
    //var_dump($newVar1);

    echo $newVar1
     

  11. #11
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Gibt 'B@!M@W@5@0@!0@P@!S' zurück. Ende aus.

    Wenn da mehr zurückgegeben wird, muss mehr Code da sein.

    Ist aber egal, lass gut sein. Es kann ja unmöglich mein Problem sein wenn du nicht helfen willst dir zu helfen.
    Tschüss und schönes WE.
    Alice bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  12. #12
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Jetzt geht es plötzlich.

    Danke!
     

  13. #13
    Avatar von ComFreek
    ComFreek ComFreek ist gerade online [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.364
    Blog-Einträge
    4
    bl5000, bitte auch die Threads als erledigt markieren, indem du auf das Häkchen neben dem "Auf Thema antworten"-Button klickst
     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  14. #14
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Hallo.

    Ich hätte da noch eine Frage zu dem Code von @Yaslaw


    PHP-Code:
    $var1 'B!MW50!0P!S';
    $pattern '/([^[:alnum:]]*[[:alnum:]])/';
    preg_match_all($pattern$var1$results);
    $newVar1 implode('@'$results[1]);

    echo 
    $newVar1
    Was macht dieses Pattern genau?
    PHP-Code:
    $pattern '/([^[:alnum:]]*[[:alnum:]])/'
    Ich kann es drehen und wenden wie ich will, ich kann es nicht lesen.

    Hintergrund meiner Frage ist das durch diesen Code die Umlaute in den Strings gelöscht werden.

    Wenn ich davor und danach ein "Echo" einbaue, sind die Umlaute davor da und danach nicht mehr.

    Edit:

    Ich habe das Pattern mal etwas geändert.

    PHP-Code:
    $pattern '/([^[:alnum:]ÄÖÜ]*[[:alnum:]ÄÖÜ])/'
    und

    PHP-Code:
    $pattern '/([^[A-Z0-9ÄÖÜ]*[A-Z0-9ÄÖÜ])/'
    Ist das richtig so?
    Geändert von Alice (10.04.12 um 12:19 Uhr)
     

  15. #15
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.961
    Die beiden Ausdrücke bewirken das Gleiche bis auf die Tatsache, dass im ersten auch Kleinbuchstaben erkannt werden.
    Alice bedankt sich. 
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

Ähnliche Themen

  1. String: nach Zeichen weiteres Zeichen einfügen
    Von Axet im Forum Java Grundlagen
    Antworten: 3
    Letzter Beitrag: 28.04.11, 19:10
  2. Antworten: 1
    Letzter Beitrag: 13.01.09, 22:18
  3. Antworten: 3
    Letzter Beitrag: 12.08.07, 22:52
  4. Zeichen in String einfügen, Fehlersuche
    Von flashOr im Forum Java
    Antworten: 3
    Letzter Beitrag: 11.11.06, 21:12
  5. Zeichen in String einfügen
    Von KappRa im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 20.09.05, 21:26