регулярное выражение для сопоставления чисел в формате запятой с десятичными - PullRequest
0 голосов
/ 07 января 2009

У меня есть это регулярное выражение:

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

однако это не удается, когда у меня есть такая сумма: 41022095.6

Что-нибудь, что мне не хватает?

Ответы [ 4 ]

3 голосов
/ 07 января 2009

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

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

Я изменил {2} около конца на {1,2}, чтобы разрешить одну или две десятичные цифры после десятичной точки. Я также изменил . на \., потому что обычное . в регулярном выражении означает «соответствовать любому символу».

1 голос
/ 07 января 2009

не означает ли точка " любой символ ", если только он не заключен в скобки?

0 голосов
/ 07 января 2009

Попробуйте изменить последний бит на (. \ D {1,2}) ?. В противном случае потребуется 2 цифры в конце.

Кроме того, вы можете избежать '.'

0 голосов
/ 07 января 2009

Эта часть: "(.\d{2})?" говорит, что ваш номер может заканчиваться на «точка, за которой следуют две цифры», но это необязательно. Поскольку в вашем примере нет ни одной точки, за которой следуют две цифры, и ничего, что разрешает точку, не найдено.

Кроме того, задница Даффимо указала, что вы, вероятно, хотите экранировать точку, чтобы она соответствовала полной остановке вместо любого символа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...