вот некоторый материал от производителей Regex Buddy. Они прибыли из библиотеки, таким образом, я уверен, что они были полностью протестированы.
Число: сумма Валюты (обязательные центы) Дополнительные тысячи разделителей; обязательная двухразрядная часть
Match; JGsoft:
^[+-]?[0-9]{1,3}(?:,?[0-9]{3})*\.[0-9]{2}$
Число: сумма Валюты (дополнительные центы) Дополнительные тысячи разделителей; дополнительная двухразрядная часть
Match; JGsoft:
^[+-]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?$
Число: сумма Валюты США & ЕС (дополнительные центы) Может использовать американский стиль 123 456,78 нотаций и европейский стиль 123.456,78 нотаций. Дополнительные тысячи разделителей; дополнительная двухразрядная часть
Match; JGsoft:
^[+-]?[0-9]{1,3}(?:[0-9]*(?:[.,][0-9]{2})?|(?:,[0-9]{3})*(?:\.[0-9]{2})?|(?:\.[0-9]{3})*(?:,[0-9]{2})?)$
Я нашел это регулярное выражение на строке по www.RegExLib.com Kirk Fuller, Gregg Durishan
, я использовал его успешно для нескольких прошлых лет.
"^\$?\-?([1-9]{1}[0-9]{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))$|^\-?\$?([1-9]{1}\d{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))$|^\(\$?([1-9]{1}\d{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))\)$"
Не полностью протестированный вообще (я просто записал его!), но, кажется, ведет себя правильно:
^-?(?:0|[1-9]\d{0,2}(?:,?\d{3})*)(?:\.\d+)?$
Набор тестов:
0
1
33
555
4,656
4656
99,785
125,944
7,994,169
7994169
0.00
1.0
33.78795
555.12
4,656.489
99,785.01
125,944.100
-7,994,169
-7994169.23 // Borderline...
Wrong:
000
01
3,3
5.
555,
,656
99,78,5
1,25,944
--7,994,169
0.0,0
.10
33.787,95
4.656.489
99.785,01
1-125,944.1
-7,994E169
Примечание: Ваша Система. Десятичное число является зависимым локали, трудно для создания в regex, кроме, возможно, при создании его. Я принял цифры, сгруппированные три, даже если в некоторых культурах (локали), там различные правила.
Это тривиально для добавления пробела вокруг этого.