preg_match
Tobias Otto
- php
0 Snafu0 Tobias Otto0 Snafu0 Snafu0 Tobias Otto0 Snafu
Hallo,
ich möchte folgende zeichenfolge kontrollieren
1|12323142|2|25345423
habe es folgendermaßen probiert
preg_match("/1|[0-9]{8}+|2|[0-9]{8}/i", $status)
aber irgendiwe klappts nicht so richtig. irgendwie bringt er mir immer ein positives ergebnis
auch wenn ich meine zeichenfolge abänder
1|12323142|2|25345423 <- davor
1|1232314225345423 <- danach
eigentlich müsste er doch bei der abgeänderten zeichenfolge keine übereinstimmung finden
Hallo!
[...]
aber irgendiwe klappts nicht so richtig. irgendwie bringt er mir immer ein positives ergebnis
[...]
Weil die Pipe "|" eine spezielle Bedeutung bei regulären Ausdrücken hat.
Versuchs mal mit maskierter Pipe, also "|" statt "|".
Hallo!
Habs jetzt so gemacht
preg_match ("/1|[0-9]{8}+|2|[0-9]{8}/i", $status)
jetzt bekomme ich gar kein Ergebnis mehr, obwohl die Zeichenfolgen eigentlich richtig ist
1|12323142|2|25345423
Hallo!
jetzt bekomme ich gar kein Ergebnis mehr, obwohl die Zeichenfolgen eigentlich richtig ist
Poste bitte mal deinen Code.
<?php
$status = "1|12323142|2|25345423";
if(preg_match ("/1\|[0-9]{8}+\|2\|[0-9]{8}/i", $status)) { // hier passts
echo "Yes";
} else {
echo "No";
}
echo "\n";
$status = "12|12323142|2|25345423";
if(preg_match ("/1\|[0-9]{8}+\|2\|[0-9]{8}/i", $status)) { // hier nicht
echo "Yes";
} else {
echo "No";
}
echo "\n";
?>
liefert bei mir wie erwartet
Yes
No
Ach ja, da man Zahlen meines Wissens nach nicht groß oder klein schreiben kann (übers Keyboard wenigstens) brauchst du den "i" Modifier nicht.
Es reicht also:
preg_match ("/1\|[0-9]{8}+\|2\|[0-9]{8}/", $status)
Hallo,
also es gibt folgende Möglichkeiten
entweder steht in der sqp
1|15022008
oder
1|10022008|2|15022008
oder
1
oder
2
hier mein script
if (preg_match("/1|[0-9]{8}/i", $status)) {
$status = explode("|", $status);
echo "Bezahlt: am ".$status[1]."<br />
Verschickt:";
} else if (preg_match ("/1|[0-9]{8}+|2|[0-9]{8}/i", $status)) {
$status = explode("|", $status);
echo "Bezahlt: am ".$status[1]."<br />
Verschickt: am ".$status[3];
} else if ($status == 1) {
echo "Bezahlt: ja<br />
Verschickt:";
} else if ($status == 2) {
echo "Bezahlt: ja<br />
Verschickt: ja";
}
irgendwie meint er immer er soll das erste if ausführen obowhl in der sql in dem fall der fall 2 steht
1|10022008|2|15022008
Hallo!
irgendwie meint er immer er soll das erste if ausführen obowhl in der sql in dem fall der fall 2 steht
Schau dir nochmal deine beiden ersten Fälle an:
1|15022008
oder
1|10022008|2|15022008
Der erste schaut dem 2ten ziemlich ähnlich oder?
Entweder du prüfst zuerst den 2ten der beiden (weil spezifischer) oder du sagst dem Regex, dass beim 1ten nachher nichts mehr stehen soll.
Das geht so:
if (preg_match("/1\|[0-9]{8}$/i", $status)) { // $ am schluss anhängen
...
}
Schau dir doch mal z.B. http://tut.php-quake.net/regex.html an. Dein "Problem" besteht eigentlich nur aus Regex Grundlagen.
Danke!
Das habe ich nicht gewusst, dass ich mit $ diese Operation abschließe