我有一个字符串,我想检查它是否只包含数字。我真的不想(或不需要)解析它或任何东西,我只想知道它除了数字之外什么都不包含(也没有浮点分隔符,只有数字)。
PHP 有一个很好的函数,叫做ctype_digit
. .Net Framework 中的 C# 是否有类似的东西?还是我需要使用正则表达式或类似的东西?
为此创建一个正则表达式当然非常简单,但如果有更好的方法,我不想使用它:p
我有一个字符串,我想检查它是否只包含数字。我真的不想(或不需要)解析它或任何东西,我只想知道它除了数字之外什么都不包含(也没有浮点分隔符,只有数字)。
PHP 有一个很好的函数,叫做ctype_digit
. .Net Framework 中的 C# 是否有类似的东西?还是我需要使用正则表达式或类似的东西?
为此创建一个正则表达式当然非常简单,但如果有更好的方法,我不想使用它:p
您可以使用int.TryParse。如果提供的字符串代表一个有效数字,它将返回 true,否则返回 false。不要忘记使用NumerStyles.None
禁止空格和加号/减号。
更新:正如 empi 所说,这不适用于非常大的字符串。如果你有任意大的字符串,也许正则表达式是你唯一的选择。你可以做类似的事情Regex.IsMatch(theString,"^[0-9]+$")
bool onlyDigits = "1234".All(c => char.IsDigit(c));
是的,您可以使用
bool Int32.TryParse(string s, out int result);
代码示例:
string myString = "1265";
int myInt;
if (Int32.TryParse(myString,myInt) // Returns true if mystring contains only digits
{
...
}
其他选择是使用正则表达式:
public static bool IsDigit(string myString)
{
string pattern = @"^\d*$";
if (Regex.IsMatch(myString, pattern))
return true;
else
return false;
}
您可以根据需要更改模式。
Methinks,你最好使用正则表达式为你完成这项工作......“\d+”应该这样做......好吧,你说你不想使用它......但这是确保万无一失的方法该字符串仅包含数字,然后如果正则表达式通过,那么您可以直接使用 int.Parse(...) 。
没有内置方法。Int32.TryParse 或 Int64.TryParse 不适用于仅包含数字的非常长的字符串(它们也可能允许使用其他字符来表示整数)。
正如其他人所说,您可以使用该int.TryParse
方法,尽管除非您的数字真的非常大,否则您可以使用TryParse
其他类型的方法,其范围比 int32 的更大。(当然使用NumberStyles.None
选项,以避免符号和标点符号)。
这是分解:
int
-2,147,483,648 .. 2,147,483,647uint
0 .. 4,294,967,295long
-9,223,372,036,854,775,808 .. 9,223,372,036,854,775,807ulong
0 .. 18,446,744,073,709,551,615float
-3.402823e38 .. 3.402823e38double
-1.79769313486232e308 .. 1.79769313486232e308decimal
-79228162514264337593543950335 .. 79228162514264337593543950335可以解析最大数字的是Double
. 如果你需要使用 number ,你会失去一些精度,但它可以解析很长的数字(虽然你说你不需要使用它,所以它不应该是一个问题)。在我做的快速测试中,它成功地解析了以下字符串:
79228162514264337593543950335792281625142643375935439503357922816251426433759354395033579228162514264337593543950335792281625142643375935439503357922816251426433759354395033579228162514264337593543950335792281625142643375935439503357922816251426433759354395033579228162514264337593543950335234234234234243423
(那是 308 个字符,多一个数字就会失败)
不过,如果您不打算使用该数字,这可能是一种矫枉过正,所以我会选择正则表达式,或者更好的循环检查每个字符是一个数字。
如果你想有点疯狂,你可以把它分成几个较小的字符串,并使用任务库以并行方式检查它:P
(我现在知道它有点跑题了,但如果你确实想这样做,你应该检查parallel.for
一下Partition Ranger
,看看这个 C9 10 分钟剪辑:Parallel For Partition Ranger)