Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Regex in javascript to allow only numbers, commas, and a single decimal point

Currently i am using this regex to match for positive numbers with a single decimal point

/^\d+(\.\d+)?$/

But this doesn't allow commas. How can i modify this to allow zero or more commas before the decimal point?

Example :

  • 11,111.00 (should be allowed) I am okay with numbers having any number of comma's before decimal point.

EDIT:

Valid values

  • 111
  • 11,111
  • 11,111.0
  • 111111

The values can be entered with or without comma. The datatype of this field is SQL MONEY, so it will handle comma's.

like image 642
Prayag Sagar Avatar asked Oct 25 '16 08:10

Prayag Sagar


2 Answers

need

/^(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?$/

See the regex demo

Details

  • ^ - start of string
  • (?:\d{1,3}(?:,\d{3})*|\d+) - Either of:
    • \d{1,3}(?:,\d{3})* - 1 to 3 digits followed with 0+ sequences of a , and 3 digits
    • | - or
    • \d+ - 1 or more digits
  • (?:\.\d+)? - an optional sequence of . and 1+ digits
  • $ - end of string.

var strs = [',,,,', '111', '11,111', '11,111.0', '111111'];
var re = /^(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?$/;
for (var s of strs) {
  console.log(s + " => " + re.test(s));
}
like image 79
Wiktor Stribiżew Avatar answered Sep 18 '22 02:09

Wiktor Stribiżew


This is a very simple general solution, without any assumptions about how many digits are needed.

/^\d[\d,]*(\.\d+)?$/

[\d,] will match digits or commas.
You could make the regex more complicated if you really need it to be more specific.

like image 29
Buh Buh Avatar answered Sep 22 '22 02:09

Buh Buh