2011-09-22 112 views
2

我有一个输入字段,应该只接受数字。在C中验证输入字段#

如何验证字符串? 会这样:

string s = "12345"; 
double num; 
bool isNum = double.TryParse(s, out num); 

或者.net有一个解决方案吗?

+0

没什么不对的 –

+1

TryParse _is_ a .Net解决方案。 –

+0

然后TryParse它是:) – hogni89

回答

2

你所做的事看起来是正确的。

您还可以创建一个扩展方法,使其更容易:

public static bool IsNumeric(this object _obj) 
    { 
     if (_obj == null) 
      return false; 

     bool isNum; 
     double retNum; 
     isNum = Double.TryParse(Convert.ToString(_obj), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, out retNum); 
     return isNum; 
    } 

,那么你可以这样做:

s.IsNumeric() 
+1

请注意,此方法也将允许可以解析为数字的字符串。 (即如果你只想要数字作为字符,那么这不是100%正确的)。 –

0

为什么不尝试通过UI验证输入?我不知道你是否使用asp.net,如果是的话,RegularExpressionValidator通常是一个有效的解决方案。 (http://www.w3schools.com/aspnet/control_regularexpvalidator.asp)。希望这可以帮助!

1

你的解决方案还行,但你可以创建一个方法为你完成这项工作。请记住,由于这种文化,它可能不适用于其他国家。那如下的东西呢?

public bool isNumeric(string val, System.Globalization.NumberStyles NumberStyle) 
{ 
    Double result; 
    return Double.TryParse(val,NumberStyle, 
     System.Globalization.CultureInfo.CurrentCulture,out result); 
} 
1

VB.NET有IsNumeric函数,但是你有什么是在C#中的方法。为了使其可应用范围只写一个扩展方法上string

public static bool IsNumeric(this string input) 
{ 
    if (string.IsNullOrWhitespace(input)) 
     return false; 

    double result; 
    return Double.TryParse(input, out result); 
} 
3

单一行答案。做这份工作。

string s = "1234"; 
if (s.ToCharArray().All(x => Char.IsDigit(x))) 
{ 
    console.writeline("its numeric"); 
} 
else 
{ 
    console.writeline("NOT numeric"); 
} 
+0

我得试试这个!看起来不错 – hogni89

+0

据我所知,这正确地回答了这个问题。将字符串解析为double将允许我从问题中假设的字符(如“ - ”)不是必需的。又好又高雅! –