2010-10-12 2 views
1

Мне интересно, как реализовать строгий синтаксический разбор строки в C#.C# Strict Int/Float parsing

В частности, я хочу, чтобы строка содержала только число (в формате для конкретной культуры) и другие символы.

"1.0" -> 1.0 
"1.5 " -> fail 
" 1.5" -> fail 
" 1,5" -> fail (if culture is with ".") 
"1,5" -> fail 

Cheers!

+0

Почему «1,5» терпят неудачу? –

+0

из-за пробелов – jcolebrand

ответ

4

Метод Int32.Parse принимает флаги, охватывающие определенные ситуации, о которых вы упоминаете. Посмотрите into MSDN here на NumberStyles перечисление. Кроме того, он принимает информацию о форматировании, относящуюся к культуре.

+1

Или в этом конкретном примере Float.Parse или Decimal.Parse. Любой из этих методов примет объект IFormatProvider. Вы должны иметь возможность передать System.Globalization.CultureInfo.CurrentUICulture.NumberFormat прямо в Parse. Не уверен в белых пробелах, он может автоматически обрезать. Не знаю, почему это будет проблемой, но это не моя программа. =) – Chuck

+0

'NumberStyles' - это именно то, что обеспечивает поддержку (dis), позволяющую прокручивать/перемещать пробелы. –

2

Заканчивать методы типов int, float и double в Parse/TryParse. Они имеют overloads, которые позволяют задающий CultureInfo и позволяют ограничивать принятый формат чисел:

string value = "1345,978"; 
NumberStyles style = NumberStyles.AllowDecimalPoint; 
CultureInfo culture = CultureInfo.CreateSpecificCulture("fr-FR"); 
double number; 

if (double.TryParse(value, style, culture, out number)) 
    Console.WriteLine("Converted '{0}' to {1}.", value, number); 
else 
    Console.WriteLine("Unable to convert '{0}'.", value); 
0

TryParse специально позволяет пробелы до и после номера Double.TryParse reference, так что это не достаточно строгие для ваших требований, если вы явно не использовать NumberStyles.