Regex for Money

У меня есть asp:TextBox, чтобы сохранить стоимость денег, то есть "1000", "1000,0" и "1000,00" (запятая является разделителем из-за русского стандарта).

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

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

Ответы

Ответ 1

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

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

,\d{1,2}

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

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

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

Ответ 2

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

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, $.0001, ($.1), ($.01), $(.0001), 0.1, 0.01, 0,0001, 1,1111, 1,111., 1,00, 1,000,00, 1 доллар США, 1,00 доллара США, 1000,00 долларов США, 1 000 000 долларов США, 1 000 000 долларов США, 1 000,00 долларов США, -1,00 -1 000,00, 1 доллар США, 1,00 доллара США, 1000,00 долларов США, - $1, - $1.00, - $1,000.00, $-1, $-1.00, $-1,000.00, $(1), $(1.00), $(1,000.00), $(1), $(1.00), $(1,000,00), (1 доллар США), (1,00 долл. США), (1000,00 долл. США)

Ответ 4

Я использовал это в javascript: может вам пригодится С#

var entered = '10.00';
var regex = /^\d+(?:\.\d{2})?$/; // starts with N digits optional ".\d\d"
console.log(entered.match(regex));