How to validate numeric values which may contain dots or commas?

后端 未结 6 1192
情歌与酒
情歌与酒 2020-12-13 05:31

I need a regular expression for validation two or one numbers then , or . and again two or one numbers.

So, these

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

    \d means a digit in most languages. You can also use [0-9] in all languages. For the "period or comma" use [\.,]. Depending on your language you may need more backslashes based on how you quote the expression. Ultimately, the regular expression engine needs to see a single backslash.

    * means "zero-or-more", so \d* and [0-9]* mean "zero or more numbers". ? means "zero-or-one". Neither of those qualifiers means exactly one. Most languages also let you use {m,n} to mean "between m and n" (ie: {1,2} means "between 1 and 2")

    Since the dot or comma and additional numbers are optional, you can put them in a group and use the ? quantifier to mean "zero-or-one" of that group.

    Putting that all together you can use:

    \d{1,2}([\.,][\d{1,2}])?
    

    Meaning, one or two digits \d{1,2}, followed by zero-or-one of a group (...)? consisting of a dot or comma followed by one or two digits [\.,]\d{1,2}

    0 讨论(0)
  • 2020-12-13 06:18

    If you want to be very permissive, required only two final digits with comma or dot:

    ^([,.\d]+)([,.]\d{2})$
    
    0 讨论(0)
  • 2020-12-13 06:18

    Shortest regexp I know (16 char)

    ^\d\d?[,.]\d\d?$
    

    The ^ and $ means begin and end of input string (without this part 23.45 of string like 123.45 will be matched). The \d means digit, the \d? means optional digit, the [,.] means dot or comma. Working example (when you click on left menu> tools> code generator you can gen code for one of 9 popular languages like c#, js, php, java, ...) here.

    // TEST
    [
      // valid
      '11,11',   
      '11.11',
      '1.1',
      '1,1',
      // nonvalid
      '111,1',
      '11.111',
      '11-11',
      ',11',
      '11.',
      'a.11',
      '11,a',
    ].forEach(n=> {
      let result = /^\d\d?[,.]\d\d?$/.test(n);
      console.log(`${n}`.padStart(6,' '), 'is valid:', result);
    })

    0 讨论(0)
  • 2020-12-13 06:20
    \d{1,2}[\,\.]{1}\d{1,2}
    

    EDIT: update to meet the new requirements (comments) ;)
    EDIT: remove unnecesary qtfier as per Bryan

    ^[0-9]{1,2}([,.][0-9]{1,2})?$
    
    0 讨论(0)
  • 2020-12-13 06:31

    In order to represent a single digit in the form of a regular expression you can use either:

    [0-9] or \d

    In order to specify how many times the number appears you would add

    [0-9]*: the star means there are zero or more digits

    [0-9]{2}: {N} means N digits

    [0-9]{0,2}: {N,M} N digits or M digits

    [0-9]{0-9}: {N-M} N digits to M digits. Note: M can be left blank for an infinite representation

    Lets say I want to represent a number between 1 and 99 I would express it as such:

    [0-9]{1-2} or [0-9]{1,2} or \d{1-2} or \d{1,2}

    Or lets say we were working with binary display, displaying a byte size, we would want our digits to be between 0 and 1 and length of a byte size, 8, so we would represent it as follows:

    [0-1]{8} representation of a binary byte

    Then if you want to add a , or a . symbol you would use:

    \, or \. or you can use [.] or [,]

    You can also state a selection between possible values as such

    [.,] means either a dot or a comma symbol

    And you just need to concatenate the pieces together, so in the case where you want to represent a 1 or 2 digit number followed by either a comma or a period and followed by two more digits you would express it as follows: >

    [0-9]{1,2}[.,]\d{1-2}

    Also note that regular expression strings inside C++ strings must be double-back-slashed so every \ becomes \\

    0 讨论(0)
  • 2020-12-13 06:32
    \d{1,2}[,.]\d{1,2}
    

    \d means a digit, the {1,2} part means 1 or 2 of the previous character (\d in this case) and the [,.] part means either a comma or dot.

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