проблема числа регулярных выражений - PullRequest
0 голосов
/ 20 июня 2010

это мое регулярное выражение для цифровых номеров:

\d+(.\d+)+(,\d+)

но теперь у меня проблема, что числа 3 или 30 больше не действительны. Каким должно быть мое регулярное выражение, которое пройдут также числа 3 и 40.

Thx

Ответы [ 4 ]

3 голосов
/ 20 июня 2010
\d+(\.\d+)*(,\d+)?

Символ + в регулярном выражении означает "по крайней мере один", тогда как * означает "ноль или более", а ? означает "либо один, либо ни одного".

Кроме того, вы должны экранировать точки как \., так как в противном случае символ . - это специальный символ в регулярном выражении, означающий «любой отдельный символ».

Если вы хотите убедиться, что . в номере (если есть) всегда разделяют цифры на группы по 3, вы можете использовать это (синтаксис {x} означает «ровно x повторений»):

\d+(\.\d{3})*(,\d+)?

Или для принудительного использования тысяч разделителей все время вы можете использовать это (синтаксис {x,y} означает «где угодно от x до y повторений):

\d{1,3}(\.\d{3})*(,\d+)?
1 голос
/ 20 июня 2010

так что вы хотите регулярное выражение, которое соответствует 1 и 3.000 и 3.000,5?

Если вы не хотите захватывать результат, это должно сделать:

[.\d]+(,\d+)?

но имейте в виду, что в любом случае это не очень точно, так как оно также соответствует 2.0.0,12, и вы должны также включить проверку плюс + минус:

^(\+|-)?[.\d]+(,\d+)?

В C # вы могли бы сделать лучше с

double result;
bool isDouble = Double.TryParse("3.000,5", Globalisation.CultureInfo.InvariantCulture);
1 голос
/ 20 июня 2010

Если вы действительно хотите . для разделителя тысяч и , для десятичного разделителя, попробуйте следующее:

\d{1,3}(\.\d{3})*(,\d+)?
1 голос
/ 20 июня 2010
\d+((\.\d+)|(,\d+))?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...