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

RegexValidationNumeric

Regex Problem Overview


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

So, these are valid inputs:

11,11  
11.11  
1.1  
1,1  

Regex Solutions


Solution 1 - Regex

\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})?$

Solution 2 - Regex

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 to M digits

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

> [0-9]{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 \\

Solution 3 - Regex

\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}

Solution 4 - Regex

\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.

Solution 5 - Regex

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.

[ // tests
  '11,11',      // valid
  '11.11',
  '1.1',
  '1,1',
  '111,1',      // nonvalid
  '11.111',
  '11-11',
  ',11',
  '11.',
  'a.11',
  '11,a',
].forEach(n=> console.log(`${n}\t valid: ${ /^\d\d?[,.]\d\d?$/.test(n) }`))

Solution 6 - Regex

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

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser256034View Question on Stackoverflow
Solution 1 - Regexuser237419View Answer on Stackoverflow
Solution 2 - RegexMerav KochaviView Answer on Stackoverflow
Solution 3 - RegexBryan OakleyView Answer on Stackoverflow
Solution 4 - RegexMichael LowView Answer on Stackoverflow
Solution 5 - RegexKamil KiełczewskiView Answer on Stackoverflow
Solution 6 - RegexLikoView Answer on Stackoverflow