如何检查.NET中的字符串是否是数字?
如何检查.NET中给定的字符串是否是数字?如何检查.NET中的字符串是否是数字?
TEST1 - 是字符串
1232 - 是数
试验 - 是字符串
tes3t - 是字符串
2323k - 是字符串
4567 - 是数
我该如何使用系统功能来做到这一点?
如果ontputInt值为0(零),则使用int.TryParse(inputString,out outputInt),那么它不是数字。
Int32.TryParse返回一个bool加一个带有解析值的out参数(如果它不起作用,则返回一个out参数)。检查布尔结果以确定它是否有效,否则“0”将被拒绝。 – 2011-02-17 08:51:38
你可以编写一个测试每个字符的简单循环。
bool IsNumber(string s)
{
foreach (char c in s)
{
if (!Char.IsDigit(c))
return false;
}
return s.Any();
}
或者你可以使用LINQ。
bool IsNumber(string s)
{
return s.Any() && s.All(c => Char.IsDigit(c));
}
如果您更关心的是,如果字符串可以表示为int
类型比你所有的字符是数字,你可以使用int.TryParse()
。
bool IsNumber(string s)
{
int i;
return int.TryParse(s, out i);
}
注:你不会得到太多的帮助,如果你不开始接受一些答案的人给你。
为什么你想检查每个字符只是为了知道字符串是否有数字! – V4Vendetta 2011-02-17 08:48:52
@ V4Vendette如果你看看原来的问题,他认为唯一的例子是每个*数字都是数字。那么如何确定这一点,而不必检查每个数字? – 2011-02-17 08:50:54
这将检查是否所有字符是数字(仅针对非负整数为真)
inputString.All(c => IsDigit(c));
您也可以尝试正则表达式
string pattern = "^[-+]?[0-9]*\.?[0-9]*$";
Regex.IsMatch(inputString, pattern)
您可以使用Int32.TryParse
或Int64.TryParse
尝试并将字符串转换为数字。
否则,您可以使用下面的代码,以及:
public Boolean IsNumber(String s)
{
foreach (Char ch in s)
{
if (!Char.IsDigit(ch)) return false;
}
return true;
}
使用int.TryParse
这样。
var test = "qwe";
int result;
if(int.TryParse(test, out result))
{
//if test is int you can access it here in result;
}
您可以使用
int parsed;
if(int.TryParse("is it a number?", out parsed))
下面是一组用于在原来的问题串测试。 它使用超载能力来说明数字风格和文化。
[Test]
public void FalseOnStringyString()
{
var sources = new []{"test1", "test", "tes3t", "2323k"};
foreach (var source in sources)
{
int parsed;
Assert.IsFalse(int.TryParse(source, NumberStyles.Any, CultureInfo.InvariantCulture, out parsed));
}
}
[Test]
public void TrueOnNumberyString()
{
var sources = new[] { "1232", "4567" };
foreach (var source in sources)
{
int parsed;
Assert.IsTrue(int.TryParse(source, NumberStyles.Any, CultureInfo.InvariantCulture, out parsed));
}
}
另一种解决方案是使用正则表达式。 但在这种情况下,该方法不输出数字。
[Test]
public void TrueOnNumberyStringRegex()
{
var sources = new[] { "1232", "4567" };
var isNumber = new Regex(@"^\d+$");
foreach (var source in sources)
{
Assert.IsTrue(isNumber.IsMatch(source));
}
}
[Test]
public void FalseOnNumberyStringRegex()
{
var sources = new[] { "test1", "test", "tes3t", "2323k" };
var isNumber = new Regex(@"^\d+$");
foreach (var source in sources)
{
Assert.IsFalse(isNumber.IsMatch(source));
}
}
对字符串使用扩展方法相同。对于这个特定的价值“123.56”的回应将取决于当前的文化。
class Program
{
static void Main(string[] args)
{
string[] Values = {"123", "someword", "12yu", "123.56" };
foreach(string val in Values)
Console.WriteLine(string.Format("'{0}' - Is number?: {1}",val, val.IsNumber()));
}
}
public static class StringExtension
{
public static bool IsNumber(this String str)
{
double Number;
if (double.TryParse(str, out Number)) return true;
return false;
}
}
//public static bool IsAlphaNumeric(string inputString)
//{
// bool alpha = false;
// bool num = false;
// int l;
// try
// {
// foreach (char s in inputString)
// {
// if (!char.IsDigit(s))
// {
// alpha = true;
// }
// else
// {
// num = true;
// }
// }
// if (num == true && alpha == true)
// {
// return true;
// }
// else
// {
// return false;
// }
// }
// catch
// {
// return false;
// }
//}
这里,我们去:
public static class StringExtensions
{
public static bool IsDigits(this string input)
{
return input.All(c => !c.IsDigit());
}
public static bool IsDigit(this char input)
{
return (input < '0' || input > '9');
}
}
时使用以下调用时,它应该返回true:
var justAString = "3131445";
var result = justAString.IsDigits();
什么`?1.12``.12`? ,`-32` ?.定义一个数字:) – 2011-02-17 08:46:06
`return str.All(Char.IsDigit);` – Mohsen 2013-10-23 05:44:11