Regular expression for positive decimal number with 0, 1 or 2 decimal places

后端 未结 5 1715
终归单人心
终归单人心 2021-01-16 11:48

Please help me make regular expression for positive decimal number with 0, 1 or 2 decimal places. It must allow comma and dot. For example it must allow:

0,0         


        
相关标签:
5条回答
  • you can use the bracket notion to limit the number of digits:

    \d{0,2} would mean any run of digits from a minimum of 0 to a maximum of 2

    0 讨论(0)
  • 2021-01-16 12:14
    /^\d+([.,]\d{1,2})?$/
    

    this will properly disallow these "unformatted" numbers .01, 3., etc.

    if we have zero decimal place digits we probably as well don't want the decimal separator.

    0 讨论(0)
  • 2021-01-16 12:22

    Edit 2: now disallows exactly 0,0.0, etc.

    This matches at least one digit before the decimal place, followed by an optional decimal place, followed by 0-2 digits.

    The negative lookahead looks for any flavor of absolute zero and prevents a match.

    ^(?!0*[.,]0*$|[.,]0*$|0*$)\d+[,.]?\d{0,2}$
    

    This is the raw regex, so you'll need to escape it appropriately for your language. (For example, in some languages you need to double the \ slashes as \\.

    /^(?!0*[.,]0*$|[.,]0*$|0*$)\d+[,.]?\d{0,2}$/
    
    0 讨论(0)
  • 2021-01-16 12:22

    This will do what you want.

    I've added whitespace and comments and parentheses to clarify it:

    (                   #
      ( 0*[1-9]\d*   )  # a non-zero integer portion, followed by
      ( [\.,]\d{1,2} )? # an optional fraction of 1 or 2 decimal digits
    )                   # 
    |                   # OR
    (                   #
      ( 0+ )            # a zero integer portion, followed by
      (                 # an mandatory non-zero 1-2 digit fraction, consisting of
        [\.,]           # a decimal point
        (               # followed by 
          ( 0[1-9]   )  # a 0 followed by a 1-9,
          |             # OR
          ( [1-9]\d? )  # a 1-9 followed by an optional decimal digit
      )
    )
    

    The regular expression is suboptimal it something like 0000000000.01 will backtrack when it doesn't find a non-zero digit following the zeros in the integer portion, but it should work.

    0 讨论(0)
  • 2021-01-16 12:32

    What you've got so far seems unnecessarily complicated to me. How about just

    /^\d+([.,]\d{0,2})?$/
    

    This is correct for every test case in the OP except for:

    0.0
    0,00
    0
    

    I don't see why you'd reject these.

    0 讨论(0)
提交回复
热议问题