And the clouds parted, and Wiggins d Anconia said...
> 
> 
> > Rick Bragg wrote:
> > > Hi,
> > > 
> > > I want to write a script that will test the contents of a file.
> > > 
> > > The file being tested will pass only if it contains nothing more
> than an 
> > > ip address on one line.  Does anyone have a sample of a simple regex to 
> > > accomplish this?
> > 
> > /\d+\.\d+\.\d+\.\d+\n?/s
> > 
> 
> Beware of insufficient regexes in regex clothing.  The above will
> certainly find one or more digits followed by a dot, followed by one or
> more digits followed by a dot, etc.  But it does *NOT* match an IP
> address...
> 
> /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
> 
> Is at least closer, but it is still not sufficient, as IP addresses are
> bounded, I believe, at 255 so 336.47.894.0, will match the above, but is
> not a valid IP address.
> 
> How strict do you need to be, how sure are you about the data in the files?
> 

Good point.

At it's most basic, to match any valid IPv4 address alone on a line, I would
use
/\A((1?\d{1,2}|2([0-4]\d|5[0-5]))\.){3}(1?\d{1,2}|2([0-4]\d|5[0-5]))\z/

Which will match a string containing only a dotted quad from 0.0.0.0 to
255.255.255.255, inclusive.  Note that I'm assuming the string in
question contains the _entire_ contents of the file.

A couple of things to note, though:
* A valid IP is actually any 32 bit integer from 0 to 4294967295 (try
  putting 3639555427 in Mozilla (or supposedly any other well-behaved
  browser... in other words, _not_ IE)... it will take you to Google
  because that number is actually 216.239.53.99 - the address for
  www.google.com - in base-10).
* This pattern doesn't exclude RFC1918 reserved addresses (10/8,
  172.16/12, and 192.168/16), or multicasts.
* It doesn't take netmasks into account.  1.2.3.255/16 is a valid
  host address, while 1.2.3.255/24 is not (it's a broadcast).

Taking these sorts of things into account could make for a bit hairier
solution.  ;)  Caveat user.



  /~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\
 | Brian Gerard                I'm writing an unauthorized autobiography. |
 | First initial + 'lists'                                                |
 | at technobrat dot com                                                  |
  \______________________________________________________________________/

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to