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

StackOverflow https://stackoverflow.com/questions/617826

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

^\$?(\d{1,3},?(\d{3},?)*\d{3}(.\d{0,3})?|\d{1,3}(.\d{2})?)$

Другие советы

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

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

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

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

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

^\$?(\d{1,3},?(\d{3},?)*\d{3}(\.\d{1,3})?|\d{1,3}(\.\d{2})?)$

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

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

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

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

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

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

[$\d,.]+

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top