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

时间:2018-07-04 10:23:53

标签: powershell numeric

我要检查字符串是否包含数字值。我有此代码:

$string = "some string that contains 123456     in the middle"
$substring = $string.substring(27,9).Trim()

我有$ substring,它将包含“ 123456”,并且我在这里找到了这个IsNumeric函数: In PowerShell, how can I test if a variable holds a numeric value?

问题是,当我从$ string中提取它时,它的行为类似于字符串类型,并且IsNumeric返回false,因为它将它与所有数字类型进行了比较。甚至很难包含一个数字,IsNumeric的输出将为false。

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

5 个答案:

答案 0 :(得分:7)

您可以使用正则表达式匹配来对其进行测试:

if($substring -match "^\d+$")
{
   # Do something
}

这应该适用于仅包含数字(即为正整数)的任何字符串。如果要包含负整数,请将模式更改为^-?\d+$

答案 1 :(得分:2)

检查给定字符串是否可以转换为数字的正确方法:

[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
}

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

答案 2 :(得分:1)

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

\ d *检查0到无限数字

\ d?检查0到1位数

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

\ d +检查1到无限数字

^是一行的开头

$是一行的结尾

所以

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

答案 3 :(得分:0)

使用-match'\ d'

string = "some string that contains 123456     in the middle"
$substring = $string.substring(27,9).Trim()
$substring -match '\d'

答案 4 :(得分:0)

使用.NET框架的传统方式:

if( [Microsoft.VisualBasic.Information]::IsNumeric($myString) ) {
  # do something
}