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 долл. США)
Ответ 3
http://regexlib.com/Search.aspx?k=money
Ответ 4
Я использовал это в javascript: может вам пригодится С#
var entered = '10.00';
var regex = /^\d+(?:\.\d{2})?$/; // starts with N digits optional ".\d\d"
console.log(entered.match(regex));