1

I need expression to check if number 7 is less than 30 and greater than 1. This is an example. Can anybody provide expression and an explanation?

tshepang
  • 12,111
  • 21
  • 91
  • 136
opejanovic
  • 21
  • 1
  • 3
  • 4
    Regex is probably not the best way to approach this... – Joel May 13 '14 at 17:16
  • This is an example of much complex problem. I have other solution but i need to find one with regex. – opejanovic May 13 '14 at 17:19
  • Please describe the complex problem then - do the ranges change? Why regex? – Tim Pietzcker May 13 '14 at 17:22
  • Unlike forum sites, we don't use "Thanks", or "Any help appreciated", or signatures on [so]. See "[Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?](http://meta.stackoverflow.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts). – John Saunders May 13 '14 at 17:29

2 Answers2

1
^([2-9]|[1-2][0-9])$

The expression above will match, if:

  • the given string is one character long and that character is a number ranging from 2 to 9
  • the given string is two characters long, first character is 1 or 2 and the second character ranges from 0 to 9
Khub
  • 113
  • 1
  • 11
0

Don't use regex, but if you want to, here you go:

^(?:[2-9]|[1-2][0-9])$

Regular expression visualization

Debuggex Demo


Explanation:

This anchors to the beginning/end of the string (so we don't match 7 in the number 175) and then all of the logic happens in the non-capturing group. Either match the numbers [2-9 ] (greater than 1) OR match [1-2] followed by any digit [0-9] (range from 10-29). Notice that I used [0-9] instead of \d because it fits better for readability and \d technically will match other numeric characters (Arabic, etc).


Side note, if you want to allow leading 0's (1 < 007 == 7 < 30), you can allow for 0+ 0's after the start of the string:

^0*(?:[2-9]|[1-2][0-9])$
Sam
  • 20,096
  • 2
  • 45
  • 71