检查字符串是否包含PowerShell中的数值?

Mar*_*One 2 powershell numeric

我想检查一个字符串是否包含数值.我有这个代码:

$string = "some string that contains 123456     in the middle"
$substring = $string.substring(27,9).Trim()
Run Code Online (Sandbox Code Playgroud)

我有$ substring,它将包含"123456",我在这里找到了这个IsNumeric函数: 在PowerShell中,如何测试变量是否包含数值?

问题是,当我从$ string中提取它时,它就像字符串类型一样,并且IsNumeric返回false,因为它将它与所有数字类型进行比较.甚至强硬它将包含一个数字,IsNumeric的输出将是假的.

有没有更好的方法来检查字符串是否包含数值?

col*_*lsw 8

检查给定字符串是否可以变成数字的正确方法:

[string]$InString = "123456"
[Int32]$OutNumber = $null

if ([Int32]::TryParse($InString,[ref]$OutNumber)){
    Write-Host "Valid Number"
    $OutNumber
} else {
    Write-Host "Invalid Number"
    #error code here
}
Run Code Online (Sandbox Code Playgroud)

然后$OutNumber将包含数字作为数字类型。


box*_*dog 8

您可以使用正则表达式匹配来测试它:

if($substring -match "^\d+$")
{
   # Do something
}
Run Code Online (Sandbox Code Playgroud)

这适用于任何只包含数字的字符串(即整数).


Rob*_*man 6

在正则表达式中 \d 是对数字的检查

\d* 检查 0 到无限位数

\d? 检查 0 到 1 位数字

\d{0,5} 检查 0 到 5 位数字

\d+ 检查 1 到无限位数字

^ 是一行的开始

$ 是一行的结尾

所以

^\d+$ 将检查从行首到行尾的 1 个或多个数字,并且仅检查数字。任何其他符号都会从头到尾断开连接并且找不到。