我要检查字符串是否包含数字值。我有此代码:
$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。
有没有更好的方法来检查字符串是否包含数字值?
答案 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
}