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

Refresh

December 2018

Views

1.7k time

5

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.

4 answers

0

Это довольно трудно читать, но я объясню

/^(?:\d+)(?:(?:\d+)|(?:(?:,\d+)?))+(?:\.\d+)?$/

Все ?:просто явно сказать движок регулярных выражений «Не захватить согласованное этим Paren следующей группы).

Упрощенная версия будет

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

Но это было бы захватить много соответствующих групп без причины, так что я удалил их

1

Это очень простое общее решение, без каких-либо предположений о том, сколько цифр требуется.

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

[\d,]будет соответствовать цифрам или запятые.
Вы могли бы сделать регулярное выражение более сложным , если вам это действительно нужно , чтобы быть более точным.

3

необходимость

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

См регулярок демо

подробности

  • ^ - начало строки
  • (?:\d{1,3}(?:,\d{3})*|\d+) - Любой из:
    • \d{1,3}(?:,\d{3})*- от 1 до 3 цифр с последующим 0+ последовательностей ,и 3 цифр
    • | - или же
    • \d+ - 1 или более цифр
  • (?:\.\d+)?- необязательная последовательность .и цифры 1+
  • $ - конец строки.

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));
}
1

Я хотел бы использовать это

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

Смотрите демо и объяснение