Regex для денег - PullRequest
       20

Regex для денег

14 голосов
/ 22 июня 2009

У меня есть asp:TextBox для хранения стоимости денег, то есть «1000», «1000,0» и «1000,00» (запятая - разделитель по российскому стандарту).

Что ValidationExpression я должен использовать в соответствующих asp:RegularExpressionValidator?

Я пытался \d+\,\d{0,2}, но это не позволяет число без десятичных цифр, например. просто «1000».

Ответы [ 4 ]

29 голосов
/ 22 июня 2009
\d+(,\d{1,2})?

разрешит запятую только при наличии десятичных цифр и не будет использовать запятую вообще. Знак вопроса означает то же, что и {0,1}, поэтому после \d+ у вас либо ноль экземпляров (т.е. ничего), либо один экземпляр

,\d{1,2}

Как правильно указывает Хелен, достаточно будет использовать группу без захвата, как в

\d+(?:,\d{1,2})?

Дополнительные ?: означают, что круглые скобки предназначены только для группировки части ,\d{1,2} для использования с вопросительным знаком, но нет необходимости помнить, что было найдено в этих скобках. Поскольку это означает, что для регулярного выражения требуется меньше усилий, вы получаете повышение производительности.

7 голосов
/ 09 июля 2009

Мы используем это очень либеральное регулярное выражение для проверки денег:

new Regex(@"^\-?\(?\$?\s*\-?\s*\(?(((\d{1,3}((\,\d{3})*|\d*))?(\.\d{1,4})?)|((\d{1,3}((\,\d{3})*|\d*))(\.\d{0,4})?))\)?$");

Это позволяет все это: 0, 0, (0.0000), .1, .01, .0001, $ .1, $ .01, $ .0101, ($ .1), ($ .01), $ (.0001), 0.1, 0.01 0,0001, 1, 1111, 1111, 1, 1,00, 1 000,00, 1, 1, 1,00 долл., 1 000,00 долл., 1,0000, 1,0000 долл. США, 1 000,00 долл. США, -1, -1,00, -1 000,00 долл. США, 1, , - 1 долл. США, - 1,00 долл. США, - 1 000,00 долл. США, -1 долл. США, -1,00 долл. США, 1 000,00 долл. США, 1 долл. США, (1,00 долл. США), 1 000 долл. США, 1 долл. США, 1,00 долл. США, (1 000,00 долл. США), (1 долл. США), (1,00 долл. США), (1 000,00 долл. США)

3 голосов
/ 20 ноября 2013

я использовал это в javascript : может быть полезно для вас в c #

var entered = '10.00';
var regex = /^\d+(?:\.\d{2})?$/; // starts with N digits optional ".\d\d"
console.log(entered.match(regex));
3 голосов
/ 22 июня 2009
...