Regex for number check below a value

前端 未结 6 1428
-上瘾入骨i
-上瘾入骨i 2020-12-11 05:54

I\'m still a beginner at regex so this is a little above me currently.

I need to validate a number input to two characters and it can\'t be more than the value 12.

相关标签:
6条回答
  • 2020-12-11 06:20

    For something like this (testing if an integer is less than a given value), you should really not use a regex.

    Instead, just use a simple condition like this one (the syntax will depend on the language you're working with) :

    if ($variable <= 12) {
      // OK
    }
    else {
      // Not OK
    }
    
    0 讨论(0)
  • 2020-12-11 06:23

    Regex is not suited to dealing with ranges like this, but anyway this should work:

    /^(0?[1-9]|1[012])$/
    

    Description:

    ^       match start of the string
    (0?     optional zero
    [1-9]       any number between 1 and 9
    |1[012])    or match 1 followed by either a 0, 1, 2 i.e. 10, 11, 12.
    $           match end of string
    
    0 讨论(0)
  • 2020-12-11 06:31

    For the "character either x, or y, or z, or ...", there's the character class, expressed in square brackets:

    [012]
    

    means "any character of 0,1, or 2".

    0 讨论(0)
  • 2020-12-11 06:32

    0[0-9]|1[0-2]

    Description:
    
     [0-9] : number between 00 and 09
         | : or
    1[0-2] : and if starting with 1, next number should be between 0 -1 (testing 10-12)
    
    0 讨论(0)
  • 2020-12-11 06:38
    (0[0-9])|(1[0-2])
    

    this matches a zero, followed by one arbitrary digit, or a one, followed by 0, 1 or 2

    0 讨论(0)
  • 2020-12-11 06:40

    The following code (Groovy) creates a regex similar to the answer from @Gery Green but works for any given number:

    String getSmallerNumberRegEx(String number) {
      int length = number.length()
      List<String> patterns = [];
      if (length >= 2) {
        patterns.add("\\d{1,${length - 1}}") // any number with less digits
      }
      for (int i = 0; i < number.length(); i++) {
        def digit = number[i].toInteger()
        if (digit > 0) {
          // same prefix + smaller number + any postfix:
          patterns.add("${number.substring(0, i)}[0-${digit - 1}]\\d{${length - i - 1}}")
        }
      }
      return patterns.join('|')
    }
    
    0 讨论(0)
提交回复
热议问题