REGEX unique numbers delimited by comma

后端 未结 3 898
遥遥无期
遥遥无期 2020-12-11 11:49

I am trying to validate a comma separated list of numbers 1-31 unique (not repeating).

i.e.

  • 2,4,6,7,1 is valid input.

  • 2,2,6 is invali

3条回答
  •  盖世英雄少女心
    2020-12-11 12:29

    For a number range that exceeds 1 digit, just add word boundary's around
    the capture group and the back reference.
    This isolates a complete number.

    This particular one is numb range 1-31

     ^                                       # BOS
     (?!                                     # Validate no dups
          .* 
          (                                       # (1 start)
               \b 
               (?: [1-9] | [1-2] \d | 3 [0-1] )        # number range 1-31
               \b 
          )                                       # (1 end)
          .* 
          \b \1 \b 
     )
     (?: [1-9] | [1-2] \d | 3 [0-1] )        # Unrolled-loop, match 1 to many numb's
     (?:                                     # in the number range 1-31
          , 
          (?: [1-9] | [1-2] \d | 3 [0-1] )
     )*
     $                                       # EOS
    

        var data = [
          '2,4,6,7,1',
          '2,2,6',
          '2,30,16,3',
          '2,',
          '1,2,3,2',
          '1,2,2,3',
          '1,2,3,4,5,6,7,8'
          ];
          
          data.forEach(function(str) {
            document.write(str + ' gives ' + /^(?!.*(\b(?:[1-9]|[1-2]\d|3[0-1])\b).*\b\1\b)(?:[1-9]|[1-2]\d|3[0-1])(?:,(?:[1-9]|[1-2]\d|3[0-1]))*$/.test(str) + '
    '); });

提交回复
热议问题