Wie Ergebnis von ereg in eine Variable schreiben?

Wie Ergebnis von ereg in eine Variable schreiben?

am 04.04.2008 23:43:40 von Stefan Rosskopf

Moin,

ich möchte im Rahmen einer eMailadressüberprüfung gerne das Ergebnis,
welches ereg ausliefert (also true oder false) in eine Variable
schreiben, um es an anderer Stelle mit einem String zu versehen und
ausgeben zu lassen. Dieses funktioniert jedoch nicht.

Die entsprechende Zeile ($email bekommt einen zuvor aus $_POST['email']
ermittelten Wert zugewiesen) lautet folgendermassen:
------------
if (
($email != "")
AND
$mailgueltig =
(ereg('^[_a-zA-Z0-9-](\.{0,1}[_a-zA-Z0-9-])*@([_a-zA-Z0-9-]{ 2,}\.){0,}[_a-zA-Z0-9-]{3,}(\.[a-zA-Z]{2,4}){1,2}$',$email))
)
------------

Später prüfe ich dann entsprechend:

---------
if ($mailgueltig == FALSE)
{
echo "$email scheint nicht gültig zu sein?!";
}

Der eigentliche Check funktioniert irgendwie nur dann, wenn ich die
Variablenzuweisung "$mailgueltig =" vor ereg wegnehme, und nur noch den
ereg - Kram schreibe, dann habe ich aber keine Möglichkeit, den User
darauf hinzuweisen, dass "stadionbau@kiezkicker" irgendwie keine gültige
Mailadresse zu sein scheint?

Irgendwelche Workarounds oder Dinge, die ich übersehen habe, warum es
nicht möglich ist, das Ergebnis von ereg in eine Variable zu schreiben?


Grüsse (und Nacht, solche Dinge rauben mir aber garantiert wieder den
Schlaf...), Stefan
--
http://kiekicker.de/

Re: Wie Ergebnis von ereg in eine Variable schreiben?

am 05.04.2008 00:14:58 von Niels Braczek

Stefan Rosskopf schrieb:

> ich möchte im Rahmen einer eMailadressüberprüfung gerne das Ergeb=
nis,
> welches ereg ausliefert (also true oder false) in eine Variable
> schreiben, um es an anderer Stelle mit einem String zu versehen und
> ausgeben zu lassen.

Du möchtest preg_* statt ereg* benutzen.

8.2. Soll ich ereg() oder preg() verwenden?
http://www.php-faq.de/q/q-regexp-ereg.html

> Der eigentliche Check funktioniert irgendwie nur dann, wenn ich die
> Variablenzuweisung "$mailgueltig =3D" vor ereg wegnehme, und nur noch d=
en
> ereg - Kram schreibe, dann habe ich aber keine Möglichkeit, den User
> darauf hinzuweisen, dass "stadionbau@kiezkicker" irgendwie keine gült=
ige
> Mailadresse zu sein scheint?

Das ist Folge der Lazy-Evaluation - der zweite Ausdruck wird nur
berechnet, wenn es nötig ist. Übrigens einer der Gründe, warum man =
in
Bedingungen keine Zuweisungen machen will.

$isValidMail =3D preg_match( $pattern, $email );
if ( $isValidMail ) {...}

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Wie Ergebnis von ereg in eine Variable schreiben?

am 06.04.2008 21:33:44 von Stefan Rosskopf

Niels Braczek schrieb:

Moin Nils

> Stefan Rosskopf schrieb:
>> ich möchte im Rahmen einer eMailadressüberprüfung gerne das Ergebnis,
>> welches ereg ausliefert (also true oder false) in eine Variable
>> schreiben, um es an anderer Stelle mit einem String zu versehen und
>> ausgeben zu lassen.
>
> Du möchtest preg_* statt ereg* benutzen.
>
> 8.2. Soll ich ereg() oder preg() verwenden?
> http://www.php-faq.de/q/q-regexp-ereg.html

Ob PCRE aktiviert ist, kann ich leider nicht sagen, dafür müsste ich
erstmal ne phpinfo hochladen, kann ich erst morgen machen. Aber klingt
so, als wenn ich es tatsächlich möchte, ich werde mich da mal weiter
einlesen. Wenns denn geht, also pcre enabled ist. :-)

> Das ist Folge der Lazy-Evaluation - der zweite Ausdruck wird nur
^^^^^^^^^^^^^^^
Äh, bitte was?

> berechnet, wenn es nötig ist. Übrigens einer der Gründe, warum man in
> Bedingungen keine Zuweisungen machen will.

OK.

> $isValidMail = preg_match( $pattern, $email );
> if ( $isValidMail ) {

echo ="Deine Mailadresse scheint ungültig zu sein";
}

Ähm, das ist doch das, was ich wollte?! Also, mal davon abgesehen, dass
ich es mit ereg machen wollte, und dann nicht auf Existenz einer
Variable, sondern auf true oder false testen wollte.
Warum ist
"$isValidMail = preg_match( $pattern, $email );"
denn dann keine Zuweisung (die man nicht machen sollte- warum nicht?)?
Nur, weil da dann nach der Variable und nicht auf TRUE bzw. FALSE
abgefragt wird? Verstehe ich nicht (aber ich fang zugegebenermassen auch
erst an, überhaupt irgendwas zu verstehen, was mit ner spitzen Klammer
und nen Fragezeichen anfängt - mehr oder weniger. :>


Einstweilen erstmal Danke für deine Antwort.

Grüsse, Stefan
--
http://www.kiezkicker.de/

Re: Wie Ergebnis von ereg in eine Variable schreiben?

am 06.04.2008 22:36:34 von Michael Fesser

..oO(Stefan Rosskopf)

>Niels Braczek schrieb:
>
>> Du möchtest preg_* statt ereg* benutzen.
>>
>> 8.2. Soll ich ereg() oder preg() verwenden?
>> http://www.php-faq.de/q/q-regexp-ereg.html
>
>Ob PCRE aktiviert ist, kann ich leider nicht sagen, dafür müsste ich
>erstmal ne phpinfo hochladen, kann ich erst morgen machen. Aber klingt
>so, als wenn ich es tatsächlich möchte, ich werde mich da mal weiter
>einlesen. Wenns denn geht, also pcre enabled ist. :-)

PCRE ist immer da und ab PHP 6 Regex-Standard, ereg_* gibt's dann nur
noch auf ausdrücklichen Wunsch.

>> Das ist Folge der Lazy-Evaluation - der zweite Ausdruck wird nur
> ^^^^^^^^^^^^^^^
> Äh, bitte was?

"Falue Auswertung" - sobald das Ergebnis eines logischen Ausdrucks
feststeht, werden die restlichen Operanden gar nicht mehr ausgewertet.
Überspitzt und mit Pseudo-Syntax ausgedrückt würde

if (1 || (format C:)) {
...
}

Deiner Platte nix tun. Ohne Lazy-Evaluation wäre die Partition erledigt.

Micha

Re: Wie Ergebnis von ereg in eine Variable schreiben?

am 06.04.2008 23:35:31 von Niels Braczek

Stefan Rosskopf schrieb:
> Niels Braczek schrieb:

> Ob PCRE aktiviert ist, kann ich leider nicht sagen,

Ist es.

>> Das ist Folge der Lazy-Evaluation - der zweite Ausdruck wird nur
> ^^^^^^^^^^^^^^^
> Äh, bitte was?

Wenn zwei Teilbedingungen Oder-verknüpft werden und man schon weiß, d=
ass
die erste "Wahr" liefert, braucht man die zweite gar nicht mehr
anzusehen, weil
wahr oder wahr =3D> wahr
wahr oder falsch =3D> wahr

>> berechnet, wenn es nötig ist. Übrigens einer der Gründe, warum m=
an in
>> Bedingungen keine Zuweisungen machen will.
>=20
> OK.
>=20
>> $isValidMail =3D preg_match( $pattern, $email );
>> if ( $isValidMail ) {
>=20
> echo =3D"Deine Mailadresse scheint ungültig zu sein";
> }
>=20
> Ähm, das ist doch das, was ich wollte?!

Ja, aber eben richtig[tm].

> Also, mal davon abgesehen, dass
> ich es mit ereg machen wollte, und dann nicht auf Existenz einer
> Variable, sondern auf true oder false testen wollte.

Ein Test geht *immer* auf true oder false. Die existenz einer Variablen
wird mit isset() geprüft, das wiederum true oder false liefert.

> Warum ist
> "$isValidMail =3D preg_match( $pattern, $email );"
> denn dann keine Zuweisung (die man nicht machen sollte- warum nicht?)?

Es ist keine Zuweisung *in einer Bedingung*.

Gut:

$isValidMail =3D preg_match( $pattern, $email );
if ( $isValidMail ) {...}

Schlecht:

if ( $isValidMail =3D preg_match( $pattern, $email ) ) {...}

> Nur, weil da dann nach der Variable und nicht auf TRUE bzw. FALSE
> abgefragt wird?

Ein Vergleich auf true oder false ist schwachsinnig, weil das Ergebnis
true oder false ist, das du wieder prüfen müsstest...

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Wie Ergebnis von ereg in eine Variable schreiben?

am 07.04.2008 00:20:31 von h.schroeck

Hi,

Niels Braczek schrieb am Sonntag, 6. April 2008 23:35:

> Schlecht:
>
> if ( $isValidMail = preg_match( $pattern, $email ) ) {...}

nur so als Zwischenfrage/Anmerkung:
Wird hier nicht getestet, ob der Variablen das Ergebnis von
preg_match übergeben wird? Kann das überhaupt false liefern?

viele Grüße,
Holger

Re: Wie Ergebnis von ereg in eine Variable schreiben?

am 07.04.2008 04:49:06 von Niels Braczek

Holger Schröck schrieb:
> Niels Braczek schrieb am Sonntag, 6. April 2008 23:35:
>=20
>> Schlecht:
>>=20
>> if ( $isValidMail =3D preg_match( $pattern, $email ) ) {...}
>=20
> nur so als Zwischenfrage/Anmerkung:
> Wird hier nicht getestet, ob der Variablen das Ergebnis von
> preg_match übergeben wird? Kann das überhaupt false liefern?

http://www.php.net/manual/en/language.operators.assignment.p hp
"The value of an assignment expression is the value assigned."

Nein, if bekommt den zugewiesenen Wert, hier also das Ergebnis von
preg_match().

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------