\d+(\.\d+)*(,\d+)?
Символ +
в регулярном выражении означает "по крайней мере один", тогда как *
означает "ноль или более", а ?
означает "либо один, либо ни одного".
Кроме того, вы должны экранировать точки как \.
, так как в противном случае символ .
- это специальный символ в регулярном выражении, означающий «любой отдельный символ».
Если вы хотите убедиться, что .
в номере (если есть) всегда разделяют цифры на группы по 3, вы можете использовать это (синтаксис {x}
означает «ровно x повторений»):
\d+(\.\d{3})*(,\d+)?
Или для принудительного использования тысяч разделителей все время вы можете использовать это (синтаксис {x,y}
означает «где угодно от x до y повторений):
\d{1,3}(\.\d{3})*(,\d+)?