-
Hallo, ich sitze gerade an einer etwas schwierigeren Sache.
Vielleicht kann mir jemand helfen?
Ich habe eine Variable:
Nun möchte ich zwischen allen Buchstaben und Zahlen ein Sonderzeichen einfügen, jedoch sollen die Ausrufezeichen nicht gelten.PHP-Code:$var1 = 'B!MW50!0P!S';
Ich würde es zwar mit "chunk_split" machen, aber das funkioniert wegen den den Ausrufezeichen nicht.
Das ganze soll so aussehen:
Ich denke das ist mit PHP nicht möglich aber vielleicht hat ja jemand von euch eine Idee?PHP-Code:$var1 = 'B!MW50!0P!S';
Sonderzeichen: @
$var1 = 'B@!M@W@5@0@!0@P@!S';
Zur Verdeutlichung:
B | @ | !M | @ | W | @ | 5 | @ | 0 | @ | !0 | @ | P | @ | !S
-
Mit Regulären Ausdrücken kannst Du das machen. Einen Link dazu hatte ich in deinem anderen Thread geposted.
Gruß
-
Ok. Ich kriege das aber alleine nicht hin.
-
10.02.12 02:24 #4
- Registriert seit
- May 2007
- Ort
- Dresden (Sachsen)
- Beiträge
- 1.961
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?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); } } }
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.
-
@enfach nur Crack:
Er will das Sonderzeichen einfügen - nicht entfernen.
Mann kann es auch mit preg_replace machen: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"
Mit dem anderen stimme ich dir bei. Ich habe schon lange die Übersicht über bl5000 seine 5000 Threads verloren.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);
---------------------------------------------------------------------------------------------------
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
-
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:
Beispiel:PHP-Code:$var1 = 'DD';
... Dein Code...
echo $newVar1:
Ausgabe:
string(3) "D@D" D@DDD
Stehen sollte da eigentlich:
D@D
Beispiel:PHP-Code:$var1 = 'F';
... Dein Code...
echo $newVar1:
Ausgabe:
string(1) "F" FF
Stehen sollte da eigentlich:
F
Beispiel:PHP-Code:$var1 = 'ABC';
... Dein Code...
echo $newVar1:
Ausgabe:
string(5) "A@B@C" A@B@CABC
Stehen sollte da eigentlich:
A@B@C
PHP-Code:$var1 = '!AG';
... Dein Code...
echo $newVar1:
Ausgabe:
string(4) "!A@G" !A@G!AG
Stehen sollte da eigentlich:
!A@G
-
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
Das ergibt: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, '@');
}
In HTML-Ansicht:
In Browser-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 />
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
---------------------------------------------------------------------------------------------------
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
-
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
bekomme ich ja die Variabele normal angezeigt.PHP-Code:echo $Var1;
Mit
eben nicht.PHP-Code:echo $newVar1;
Wie kriege ich
denn "Echo-Fähig"?PHP-Code:$newVar1
Geändert von Alice (10.02.12 um 14:29 Uhr)
-
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.---------------------------------------------------------------------------------------------------
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
-
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;
-
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.---------------------------------------------------------------------------------------------------
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
-
Jetzt geht es plötzlich.
Danke!
-
10.02.12 15:13 #13
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 erreichbar • Sicherheit in PHP-Codes schaffen • Google Chrome-Extension für tutorials.de • json_compress()
-
Hallo.

Ich hätte da noch eine Frage zu dem Code von @Yaslaw
Was macht dieses Pattern genau?PHP-Code:$var1 = 'B!MW50!0P!S';
$pattern = '/([^[:alnum:]]*[[:alnum:]])/';
preg_match_all($pattern, $var1, $results);
$newVar1 = implode('@', $results[1]);
echo $newVar1;
Ich kann es drehen und wenden wie ich will, ich kann es nicht lesen.PHP-Code:$pattern = '/([^[:alnum:]]*[[:alnum:]])/';

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.
undPHP-Code:$pattern = '/([^[:alnum:]ÄÖÜ]*[[:alnum:]ÄÖÜ])/';
Ist das richtig so?PHP-Code:$pattern = '/([^[A-Z0-9ÄÖÜ]*[A-Z0-9ÄÖÜ])/';
Geändert von Alice (10.04.12 um 12:19 Uhr)
-
10.04.12 13:02 #15
- 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.
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
-
String: nach Zeichen weiteres Zeichen einfügen
Von Axet im Forum Java GrundlagenAntworten: 3Letzter Beitrag: 28.04.11, 19:10 -
Div nach x Zeichen in String einfügen. Wordwrap?
Von janosh75 im Forum PHPAntworten: 1Letzter Beitrag: 13.01.09, 22:18 -
zeichen in String an beliebiger Stelle einfügen ohne andere Zeichen zu überschreiben
Von Burny66 im Forum C/C++Antworten: 3Letzter Beitrag: 12.08.07, 22:52 -
Zeichen in String einfügen, Fehlersuche
Von flashOr im Forum JavaAntworten: 3Letzter Beitrag: 11.11.06, 21:12 -
Zeichen in String einfügen
Von KappRa im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 20.09.05, 21:26



7Danke

Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren