我需要检查一个字符串是否只包含数字。我怎么能在 C# 中实现这一点?
string s = "123" → valid
string s = "123.67" → valid
string s = "123F" → invalid
有没有像 IsNumeric 这样的函数?
double n;
if (Double.TryParse("128337.812738", out n)) {
// ok
}
假设数字不会溢出双倍则有效
对于一个巨大的字符串,试试正则表达式:
if (Regex.Match(str, @"^[0-9]+(\.[0-9]+)?$")) {
// ok
}
如果需要,添加科学记数法 (e/E) 或 +/- 符号...
您可以使用double.TryParse
string value;
double number;
if (Double.TryParse(value, out number))
Console.WriteLine("valid");
else
Console.WriteLine("invalid");
取自MSDN(如何使用 Visual C# 实现 Visual Basic .NET IsNumeric 功能):
// IsNumeric Function
static bool IsNumeric(object Expression)
{
// Variable to collect the Return value of the TryParse method.
bool isNum;
// Define variable to collect out parameter of the TryParse method. If the conversion fails, the out parameter is zero.
double retNum;
// The TryParse method converts a string in a specified style and culture-specific format to its double-precision floating point number equivalent.
// The TryParse method does not generate an exception if the conversion fails. If the conversion passes, True is returned. If it does not, False is returned.
isNum = Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, out retNum );
return isNum;
}
无论字符串有多长,这都应该有效:
string s = "12345";
bool iAllNumbers = s.ToCharArray ().All (ch => Char.IsDigit (ch) || ch == '.');
使用正则表达式是最简单的方法(但不是最快的):
bool isNumeric = Regex.IsMatch(s,@"^(\+|-)?\d+(\.\d+)?$");
如上所述,您可以使用 double.tryParse
如果你不喜欢这样(出于某种原因),你可以编写自己的扩展方法:
public static class ExtensionMethods
{
public static bool isNumeric (this string str)
{
for (int i = 0; i < str.Length; i++ )
{
if ((str[i] == '.') || (str[i] == ',')) continue; //Decide what is valid, decimal point or decimal coma
if ((str[i] < '0') || (str[i] > '9')) return false;
}
return true;
}
}
用法:
string mystring = "123456abcd123";
if (mystring.isNumeric()) MessageBox.Show("The input string is a number.");
else MessageBox.Show("The input string is not a number.");
输入 :
123456abcd123
123.6
输出:
错误的
真的
我认为您可以在 Regex 类中使用正则表达式
正则表达式.IsMatch( yourStr, "\d" )
或类似的东西离开我的头顶。
或者您可以使用 Parse 方法 int.Parse( ... )
如果您将字符串作为参数接收,则更灵活的方法是使用其他帖子中描述的正则表达式。如果你从用户那里得到输入,你可以挂上 KeyDown 事件并忽略所有不是数字的键。这样你就可以确定你只有数字。
这应该有效:
bool isNum = Integer.TryParse(Str, out Num);