PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Regulärer Ausdrück für IP-Adressen Check



flo19
24.01.05, 11:32
Hallo Community,

Ich habe ein kleinen regulären ausdruck geschrieben, der die Korrektheit einer IP Adresse überprüfen soll. Leider verstehe ich nicht was falsch an diesem Ausdruck ist :-(


echo "192.168.1.1" | egrep "^(([01]?[0-9]{0,2}|2[0-4][0-9]|25[0-5])\.){3}([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])$"

Dieser Reguläre Ausdruck funktioniert aber der obere will ich nehmen, doch finde ich dort keinen fehler :-(

grep "[0-9]\{1,3\}.\{3,3\}.[0-9]\{1,3\}"



Gruss Flo

Thomas Engelke
24.01.05, 12:47
\d{1,3}\.\d{1,3}.\d{1,3}.\d{1,3}

TME

Edit: Ups, nicht richtig gelesen, ich dachte, es ging um die Korrektur der unteren RegEx.

tschloss
25.01.05, 12:05
Hi,
ich hab mal gebastelt und für das erste Byte folgenden Ausdruck getest


^(([01]?[0-9]{0,2})|(2(5[0-5])|([0-4][0-9]))|[0-9]{1,2})\.

Das heisst, er matched für "0." bis "255.". Die "0." am Anfang sollte man vielleicht noch verhindern?
Ansonsten müßte es klappen, wenn man diesen Ausdruck im Prinzip 4 mal verwendet (das letzt Mal ohne ".")

Ich glaube Dein Ausdruck berücksichtigt nicht "normale" ein oder zweistellige Zahlen [0-9]{1,2}!?
Grüße

flo19
25.01.05, 13:11
danke für deine Antwort, mein Ausdruck berücksichtitg meiner Meinung alle Ausdrücke, er erkennt ausser 0.0.0.0 alles gültige IP Adressen.

Ich verstehe aber nicht wieso dies mit der IP bsp: 192.168.1.1 nicht klappt..., bug?!

Ich würde es gut finden wenn jemand mein regulärer Ausdruck in Zeile 1 korriegieren könnte.

Thx. & gruss

Flo

tschloss
25.01.05, 13:32
Also ich glaube, dass Du schlicht noch Klammern brauchst um die Ausdrücke, die mit "oder" verknüpft werden :



^(([01]?[0-9]{0,2}|2[0-4][0-9]|25[0-5])\.)...
^((([01]?[0-9]{0,2})|(2[0-4][0-9])|(25[0-5]))\.)


sonst beziehzt sich das oder nur auf den letzten Teil-Term

Ich glaube aber trotzdem, dass Zahlen 20-99 und 2-9 nicht matchen.
Anyway.

Good luck.

flo19
25.01.05, 17:59
Habe mein gscript umgeschrieben und bin mit dem Resultat sehr zufrieden:




#!/bin/bash

IPCHECK=$1

set `echo $IPCHECK | sed 's/\./ /g'`

if [ "$1" -ge 1 -a "$1" -le 254 ] &&
[ "$2" -ge 0 -a "$2" -le 255 ] &&
[ "$3" -ge 0 -a "$3" -le 255 ] &&
[ "$4" -ge 1 -a "$4" -le 254 ]

then
echo "Valid IP-Adress"

fi


copyleft by Florian.K