Что такое регулярное выражение C #, которое будет проверять валюту, число с плавающей запятой или целое число? - PullRequest
8 голосов
/ 06 марта 2009

Какое регулярное выражение подходит для C #, которое будет проверять число, если оно соответствует следующему?

 $1,000,000.150
 $10000000.199
 $10000 
 1,000,000.150
 100000.123
 10000

Или отрицательные эквиваленты?

Ответы [ 7 ]

14 голосов
/ 06 марта 2009

Вы можете использовать регулярное выражение csmba, если сделаете одно небольшое изменение.

^\$?(\d{1,3},?(\d{3},?)*\d{3}(.\d{0,3})?|\d{1,3}(.\d{2})?)$
5 голосов
/ 06 марта 2009

Я думаю, что ssg это правильно. Это не очень хорошее применение Regex, особенно если ваше программное обеспечение имеет дело с вводом данных за пределами США.

Например, если символом валюты является евро, или японская иена или фунт стерлингов, любой другой из дюжины символов валюты там?

А как насчет правил форматирования чисел?

В США вы должны ввести 1,000,000.00, но во Франции это должно быть 1.000.000,00. Другие страны допускают интервал между группировкой цифр ...

Если вы используете прямое регулярное выражение без учета культуры, то вы никогда не сможете успешно пройти валидацию, если не уверены на 100%, что ваше программное обеспечение никогда не будет использоваться в неамериканском контексте.

3 голосов
/ 06 марта 2009
^\$?(\d{1,3},?(\d{3},?)*\d{3}(\.\d{1,3})?|\d{1,3}(\.\d{2})?)$
2 голосов
/ 18 июня 2012

Мне кажется, я нашел проблему с решением ssg (или, возможно, с ошибкой MS!).

Запуск этого:

float.TryParse("0,2",NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"), out num)

Возвращает истину. Конечно, «0,2» не является действительным значением валюты?

1 голос
/ 06 марта 2009

Будьте осторожны с поплавками. В конце концов вы попадете в дело, такое как 0,01, представленное как 0,00999999. Строки или целые числа лучше использовать.

0 голосов
/ 24 апреля 2009

Используйте это регулярное выражение для валюты США \ $ (\ d) * \ г Матчи 300, 12900 долларов Несоответствие $ 12900,00

0 голосов
/ 06 марта 2009

Попробуйте это. Может потребоваться некоторая тонкая настройка, чтобы учесть только одну десятичную точку, но она соответствует вашим тестовым примерам. Надеюсь, это поможет.

[$\d,.]+
...