Wertebereich - Regulärer Ausdruck

Wertebereich - Regulärer Ausdruck

am 13.07.2006 17:14:44 von weblogin

Hallo Newsgroup!

Kann man innerhalb von regulären Ausdrücken auch Bereiche darstellen?
In meinem Fall versuche ich den Bereich von bestimmten IP-Adressen
mittels regulärem Ausdruck abzubilden. Der Ausdruck soll matchen, wenn
sich z.B. die IP 192.168.22.1 innerhalb des Bereiches 192.168.21.1 -
192.168.23.1 befindet.

Mein bisheriger Ausdruck, der aber so net mit der Bereichsangabe
funktioniert: /^192\.168\.[21-23]\.1$/

Der Ausdruck /^192\.168\.[0-9]{2}\.1$/ würde mir in diesem Fall nix
nützen, da er einen zu großen Bereich (10-99) für die 3.Position
innerhalb einer IP darstellt.

Für einen Tipp wäre ich euch sehr dankbar.

Gruß, Marcel

Re: Wertebereich - Regulärer Ausdruck

am 13.07.2006 18:16:21 von Carsten Wiedmann

weblogin@web.de schrieb:

> Kann man innerhalb von regulären Ausdrücken auch Bereiche darstellen?
> In meinem Fall versuche ich den Bereich von bestimmten IP-Adressen
> mittels regulärem Ausdruck abzubilden. Der Ausdruck soll matchen, wenn
> sich z.B. die IP 192.168.22.1 innerhalb des Bereiches 192.168.21.1 -
> 192.168.23.1 befindet.

Muss das ein regulärer Ausdruck sein? Also ich würde für sowas ip2long()
nehmen.

Gruß
Carsten

Re: Wertebereich - RegulärerAusdruck

am 13.07.2006 21:34:34 von Norbert Melzer

weblogin@web.de schrieb:
^^^^^^^^^^^^^^^ Hier bitte Deinen Kompletten Namen einsetzen, die
Wahrscheinlichkeit das der Beitrag von anderen überhaupt gesehen werden
kann ist dann wesentlich höher. Viele Nutzer filtern alles was nicht
zumindest aussieht wie ein Realname von vorneherein aus.

> Mein bisheriger Ausdruck, der aber so net mit der Bereichsangabe
> funktioniert: /^192\.168\.[21-23]\.1$/

~^192\.168\.2[1-3]\.1$~ sollte es tun. Allgemein sind hier
Bereichsangaben etwas komplizierter. Um zB alle möglichkeiten von 1 bis
255 abzudecken müsste man folgenden Ausdruck verwenden:

~([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])~

Es können sich hier durchaus Fehler eingeschlichen haben, habe das eben
ohne zu testen aus dem Kopf konstruiert.

Im Endeffekt schließe ich mich also Carsten an, nutze ip2long oder
schreibe Dir einen Parser der die IP für Dich auf Gültigkeit prüft, das
könnte etwas flexibler sein, gerade wenn Du die vierte Stelle auf 1
fixieren möchtest.

Achja, der Grund warum dein Statement nicht so funktiert wie Du gern
hättest, es sagt aus "An dieser Stelle soll entweder die Ziffer 2, eine
Ziffer von 1 bis 2 oder die Ziffer drei stehen" gekürzt entspräche es
also "Hier soll eine Ziffer von 1 bis 3 stehen" ist also dem Ausdruck
[1-3] gleichzusetzen.

HTH
Norbert

Re: Wertebereich - Regulärer Ausdruck

am 14.07.2006 09:52:10 von weblogin

Norbert Melzer schrieb:
> ~^192\.168\.2[1-3]\.1$~ sollte es tun. Allgemein sind hier
> Bereichsangaben etwas komplizierter. Um zB alle möglichkeiten von 1 bis
> 255 abzudecken müsste man folgenden Ausdruck verwenden:
>
> Im Endeffekt schließe ich mich also Carsten an, nutze ip2long oder
> schreibe Dir einen Parser der die IP für Dich auf Gültigkeit prüft,=
das
> könnte etwas flexibler sein, gerade wenn Du die vierte Stelle auf 1
> fixieren möchtest.

Das hilft mir für meine Aufgabenstellung leider nicht weiter. Es gilt
bestimmte Accounts eines zugangsgeschützen Bereiches nur für
bestimmte IP-Adressbereiche (sehr große und verschiedene) zugänglich
zu machen. Meine Idee war, das der Admin bestimmte Bereiche auf
einfache Art und Weise formuliert, welche dann als reguläre Ausdrücke
in der Datenbank abgelegt werden und beim Login-Versuch über die
"hereinkommende" IP gelegt werden. Die Ausdrücke für jeden Bereich
dynamisch in derArt
"([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" aufzubauen, wäre
ein wenig aufwendig, daher die Frage nach Bereichen an bestimmen
Positionen innerhalb eines Ausdrucks.

> weblogin@web.de schrieb:
> ^^^^^^^^^^^^^^^ Hier bitte Deinen Kompletten Namen einsetzen, die
> Wahrscheinlichkeit das der Beitrag von anderen überhaupt gesehen werden
> kann ist dann wesentlich höher. Viele Nutzer filtern alles was nicht
> zumindest aussieht wie ein Realname von vorneherein aus.

Ich poste direkt über Google, hab da in meinem Account auch den Namen
hinterlegt, nur wird immer nur die E-Mail Adresse angezeigt. Gibts
Alternativen über meinen Google - Account über einen Mail - Client zu
posten oder hat jemand einen anderen Tipp wo ich einen günstigen
Usenet - Zugang herbekomme?

Re: Wertebereich - RegulärerAusdruck

am 14.07.2006 11:52:32 von Norbert Melzer

weblogin@web.de schrieb:
> Die Ausdrücke für jeden Bereich
> dynamisch in derArt
> "([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" aufzubauen, wäre
> ein wenig aufwendig, daher die Frage nach Bereichen an bestimmen
> Positionen innerhalb eines Ausdrucks.

Deshalb mein Tipp mit der eigenen Funktion

>> weblogin@web.de schrieb:
>> ^^^^^^^^^^^^^^^ Hier bitte Deinen Kompletten Namen einsetzen, die
>> Wahrscheinlichkeit das der Beitrag von anderen überhaupt gesehen werden
>> kann ist dann wesentlich höher. Viele Nutzer filtern alles was nicht
>> zumindest aussieht wie ein Realname von vorneherein aus.
>
> Ich poste direkt über Google, hab da in meinem Account auch den Namen
> hinterlegt, nur wird immer nur die E-Mail Adresse angezeigt. Gibts
> Alternativen über meinen Google - Account über einen Mail - Client zu
> posten oder hat jemand einen anderen Tipp wo ich einen günstigen
> Usenet - Zugang herbekomme?

Über Google-Groups gehts AFAIK nur mit dem Web-Interface, ansonsten
bietet aber jeder INet Provider auch einen Zugang zum UseNet an. Im
=46alle des PinkPanther wäre es der Server "news.t-online.de", im Falle
eines hier ansässigen Regionalen Anbieters "news.ewetel.net", also
Probiere mal news.provider.tld aus. Ansonsten durchblättere die HP bzw
=46rage direkt den Support. (Dies ist übrigens hier OT)

Re: Wertebereich - Regulärer Ausdruck

am 14.07.2006 12:57:05 von Frank Schenk

weblogin@web.de wrote:
> Hallo Newsgroup!
>
> Kann man innerhalb von regulären Ausdrücken auch Bereiche darstellen?
> In meinem Fall versuche ich den Bereich von bestimmten IP-Adressen
> mittels regulärem Ausdruck abzubilden. Der Ausdruck soll matchen, wenn
> sich z.B. die IP 192.168.22.1 innerhalb des Bereiches 192.168.21.1 -
> 192.168.23.1 befindet.

Wie wärs mit:

$allowedIps = array('192.168.21.1','192.168.22.1','192.168.23.1');

if(!in_array($_SERVER['REMOTE_ADDR'], $allowedIps)){
// unauthorized access
}

Wobei sich das Hash allowedIPs natürlich auch auf eine DB oder Datei
abbilden lassen kann, das füllen selbiger kann dann ein kleines
Interface oder ein Editor erledigen.


gruß, Frank

Re: Wertebereich - Regulärer Ausdruck

am 14.07.2006 13:30:01 von Carsten Wiedmann

weblogin@web.de schrieb:

> Norbert Melzer schrieb:
> > ~^192\.168\.2[1-3]\.1$~ sollte es tun. Allgemein sind hier
> > Bereichsangaben etwas komplizierter. Um zB alle möglichkeiten von 1 bis
> > 255 abzudecken müsste man folgenden Ausdruck verwenden:
> >
> > Im Endeffekt schließe ich mich also Carsten an, nutze ip2long oder
> > schreibe Dir einen Parser der die IP für Dich auf Gültigkeit prüft, das
> > könnte etwas flexibler sein, gerade wenn Du die vierte Stelle auf 1
> > fixieren möchtest.
>
> Das hilft mir für meine Aufgabenstellung leider nicht weiter.

Was hilft dir nicht weiter? Das obere mit regex oder das untere wo er sich
mir anschliesst mit ip2long?

> Es gilt
> bestimmte Accounts eines zugangsgeschützen Bereiches nur für
> bestimmte IP-Adressbereiche (sehr große und verschiedene) zugänglich
> zu machen. Meine Idee war, das der Admin bestimmte Bereiche auf
> einfache Art und Weise formuliert, welche dann als reguläre Ausdrücke
> in der Datenbank abgelegt werden und beim Login-Versuch über die
> "hereinkommende" IP gelegt werden.

Das liest sich doch schon (fast) wie die Lösung über ip2long(). Der Admin
legt in der Datenbank natürlich keine regex ab, sondern einfach die StartIP
und EndIP des Bereiches. Und wenn du eh schon eine Datenbank hast, dann
kannst du diese auch direkt fragen, ob die IP des Login-Versuchs innerhalb
dieses Bereiches liegt. Also "BETWEEN StartIP und EndIP". Ansonsten ist das
ja mit 2 grösser/kleiner Vergeleiche auch selbst schnell herausgefunden.

Gruß
Carsten

Re: Wertebereich - RegulärerAusdruck

am 14.07.2006 14:05:06 von Knut Kohl

Hallo,

weblogin@web.de schrieb am 14. Jul 2006 in de.comp.lang.php.misc:

> Ich poste direkt über Google, hab da in meinem Account auch den Namen
> hinterlegt, nur wird immer nur die E-Mail Adresse angezeigt. Gibts
> Alternativen über meinen Google - Account über einen Mail - Client zu
> posten oder hat jemand einen anderen Tipp wo ich einen günstigen
> Usenet - Zugang herbekomme?

s.u. :-)

Knut

--

Newsoffice.de - Die Onlinesoftware zum Lesen und Schreiben im Usenet

Re: Wertebereich - Regulärer Ausdruck

am 14.07.2006 16:22:43 von weblogin

Hallo Leute!

Vielen Dank für eure Antworten! Hab mich nun dafür entschieden die
Sache über ip2long() / long2ip() zu lösen. Die IP - Bereiche werden
dann gleich in Form einer ausgeschriebenen IP-Adress-Angabe in der DB
abgelegt, um diese gleich direkt in einem Query auszuwerten.

Knut Kohl schrieb:

> Hallo,
>
> weblogin@web.de schrieb am 14. Jul 2006 in de.comp.lang.php.misc:
>
> > Ich poste direkt über Google, hab da in meinem Account auch den Namen
> > hinterlegt, nur wird immer nur die E-Mail Adresse angezeigt. Gibts
> > Alternativen über meinen Google - Account über einen Mail - Client =
zu
> > posten oder hat jemand einen anderen Tipp wo ich einen günstigen
> > Usenet - Zugang herbekomme?
>
> s.u. :-)
>
> Knut
>
> --
>
> Newsoffice.de - Die Onlinesoftware zum Lesen und Schreiben im Usenet

Ich weiß es ist OT aber kann man den Zugang zum Usenet bei
Newsoffice.de auch über einen Mail - Client wie Thunderbird nutzen
oder ist das Posten nur über das Webinterface möglich?

Re: Wertebereich - Regulärer Ausdruck

am 17.07.2006 11:03:18 von Ulf Kadner

Frank Schenk wrote:

> $allowedIps = array('192.168.21.1','192.168.22.1','192.168.23.1');
> Wobei sich das Hash allowedIPs

$allowedIP ist aber kein Hash! Was nun? ;-)

MfG, Ulf

Re: Wertebereich - Regulärer Ausdruck

am 17.07.2006 15:35:31 von Niels Braczek

Ulf Kadner schrieb:
> Frank Schenk wrote:
>=20
>> $allowedIps =3D array('192.168.21.1','192.168.22.1','192.168.23.1');
>> Wobei sich das Hash allowedIPs
>=20
> $allowedIP ist aber kein Hash! Was nun? ;-)

Sei doch nicht so gemein; als Array tut's das hier doch genausogut.
(Tipp für die, die sich wundern: Hash !== Array)

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: Wertebereich - Regulärer Ausdruck

am 17.07.2006 19:08:33 von Frank Schenk

Ulf Kadner schrieb:
> Frank Schenk wrote:
>
>> $allowedIps = array('192.168.21.1','192.168.22.1','192.168.23.1');
>> Wobei sich das Hash allowedIPs
>
> $allowedIP ist aber kein Hash! Was nun? ;-)

print_r($allowedIps);

Array
(
[0] => 192.168.21.1
[1] => 192.168.22.1
[2] => 192.168.23.1
)

So, jetzt du wieder. :-P

Und bis zum nächsten Mal erklärst du uns dann, warum es in PHP nur Hashs
gibt, warum Arrays Hashs mit numerischen Indizes sind.

Frank


*grins*