6

/[0-9]+/ will also match those out of range,like 999

How to write an regex that matches exactly numbers between 0~255 ?

user198729
  • 61,774
  • 108
  • 250
  • 348

5 Answers5

17

I would do:

$n >= 0 && $n <= 255

Regex are good but they can be avoided in cases like these.

codaddict
  • 445,704
  • 82
  • 492
  • 529
5

Have a look here:

000..255:       ^([01][0-9][0-9]|2[0-4][0-9]|25[0-5])$ 
0 or 000..255:  ^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$
tanascius
  • 53,078
  • 22
  • 114
  • 136
3

The simplest solution would be grab the number, convert to an integer and then test that it's value is <= 255. But if you really, really want a regex to do it, then this would work:

^([0-9]{1,2}|1[0-9]{1,2}|2[0-4][0-9]|25[0-5])$

Edit Fixed cause it didn't work in all situations. To be honest, this is why you should just parse the string into an integer and test that the integer value is <= 255.

Dean Harding
  • 71,468
  • 13
  • 145
  • 180
2

first group matches 0-99, second one 100-199, third 200-249, fourth 250-255

/[0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5]/
brian_d
  • 11,190
  • 5
  • 47
  • 72
1

In reality, you should just match 0-999 and normalise the values afterwards, but...

/(25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([0-9][0-9])|([0-9]))/
Delan Azabani
  • 79,602
  • 28
  • 170
  • 210