2015-11-06 2 views
-1

Я хотел бы проверить, является ли строка удовлетворяет следующий формат валюту с максимумом 4 знаков после запятой и может позволить запятой ,независимо от культуры и запятой может быть в местах стандартной практики.Validate формат валюта в C#

Например:

2,000,000(valid) 
200000.0000(valid) 
200 (valid) 
200.00000(invalid) 

Как это могло быть сделано?

+0

Check [** это **] (http://stackoverflow.com/questions/9182858/validating-my-money). Здесь [** еще один **] (http://stackoverflow.com/questions/2693832/best-way-to-validate-currency-input). Если это не помогло, может быть регулярное выражение, is'nt?! – Rohit416

+0

Вы получаете десятичный разделитель через '[CultureInfo] .NumberFormat.NumberDecimalSeparator'. Теперь я уверен, что для этого есть хороший RegEx, но вы также можете сделать это, как 'string [] parts = value.Split (новая строка [] {decimalSeparator}); bool isValid = parts.Length <= 1 || parts [1] .Length <= 4; ' – Corak

+0

Regex'^\ d + (\, \ d +) * (\. \ d {1,4})? $ 'может работать для вас. Демо https://regex101.com/r/lD4eZ5/1 –

ответ

5

Вы можете сделать матч Regex для своей цели.

Regex ниже подходит для конкретных примеров. Но он будет принимать запятую , в случайных местах. Demo здесь.

^\d+(\,\d+)*(\.\d{1,4})?$ 

Лучше Regex будет следующее. Проверьте demo. Base Regex взято из this сообщение.

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

Update

Чтобы ответить на комментарий - выше Regex позволяет 0090. Попробуй это. Демо-версия here.

^((([1-9]\d{0,2},(\d{3},)*\d{3}|[1-9]\d*)(.\d{1,4})?)|(0\.\d{1,4}))$ 

Обновление 2

C# Использование

var currencyString = "1,234,456.7890"; 
var regex = @"^((([1-9]\d{0,2},(\d{3},)*\d{3}|[1-9]\d*)(.\d{1,4})?)|(0\.\d{1,4}))$"; 
var isValidCurency = Regex.IsMatch(currencyString, regex); 

Обновление 3

В соответствии с ОП, разделенные , допускается в любом месте. Обновлено Regex с демо here.

^(([1-9]\d*(\,\d+)*(\.\d{1,4})?)|(0\.\d{1,4})|0)$ 

Update 4

Используйте этот один. Демо-версия HERE.

^((([1-9]\d{0,2}(,\d{3})*)(\.\d{1,4})?)|[1-9]\d*|(0\.\d{1,4})|0)$ 

Ну this :)

^((([1-9]\d{0,2}(,\d{3})*|[1-9]\d*)(\.\d{1,4})?)|[1-9]\d*|(0\.\d{1,4})|0)$ 
+0

это пропуск со следующим: 0200 – vincentsty

+0

@ vincentsty, пожалуйста, посмотрите, помогает ли обновление. –

+0

Как использовать его в C#?Regex regex = new Regex (@ "/^([1-9] \ d {0,2}, (\ d {3},) * \ d {3} | [1-9] \ d *) (. \ д {1,4}) $/г "); похоже, это работает не так, как ожидалось. Это также не работает, если я удаляю gm – vincentsty

Смежные вопросы