Проверить суммы в валюте - PullRequest
0 голосов
/ 19 мая 2011

Мне нужно принять значения, которые являются только действительными суммами.Приложение поддерживает несколько локалей, поэтому мне нужно принимать суммы в следующих форматах:

10.05 или 10,05 (в некоторых локалях используется запятая для десятичного разделителя)

Оно не должно принимать такие значения, как10,456 или 10,456

Пользователи не могут вводить символы, такие как доллар, фунт или евро.Также нельзя использовать запятые (для тысяч, миллионов, миллиардов и т. Д.).Кроме того, нельзя использовать отрицательные суммы или суммы нулевых значений.

Существует ли встроенный метод .NET для проверки этого?Сложно использовать регулярные выражения, поскольку мне нужно разрешить запятую или точку для десятичного разделителя в зависимости от локали.

Ответы [ 5 ]

1 голос
/ 19 мая 2011

Использование double.TryParse . Он обрабатывает все, что вы хотите. Вы можете предоставить пользовательский набор NumberStyles , а также пользовательский FormatProvider , если он не соответствует вашим потребностям.

1 голос
/ 19 мая 2011

Я знаю, что вы упомянули, что вы не используете RegEx, но кажется, что требования к запятой или точке довольно просты.Разве что-то подобное не сработает?

^\d*(\.|,)\d{2}

Это соответствует нескольким старшим цифрам, проверяет либо точку ИЛИ запятую, а затем соответствует только 2 конечным цифрам.

1 голос
/ 19 мая 2011

Я бы сделал следующее:

  • заменить на.

  • если позиция. в строке не принято

  • парсинг для удвоения, если не получается -> не принят

1 голос
/ 19 мая 2011

Посмотрите на функцию double.TryParse, которая принимает несколько параметров, в частности перечисление NumberFormats.Если вы указываете правильную культуру, она может обработать запятую или десятичную проблему.Я думаю, что вам нужно отдельно обработать отрицательный / нулевой вопрос.

0 голосов
/ 19 мая 2011

Если вы используете Asp.Net, попробуйте CompareValidator .Вы можете установить свойство Type в валюту.Если для свойства Operator установлено значение ValidationCompareOperator.DataTypeCheck, элемент управления CompareValidator игнорирует свойства ControlToCompare и ValueToCompare и просто указывает, можно ли преобразовать значение, введенное в элемент управления вводом, в тип данных, заданный параметромТип недвижимости.

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