Вопрос:
Я хочу проверить, содержит ли строка числовое значение. У меня есть этот код:
$string = «some string that contains 123456 in the middle» $substring = $string.substring(27,9).Trim()
У меня есть подстрока $, которая будет содержать “123456”, и я нашел эту функцию IsNumeric здесь: В PowerShell, как я могу проверить, содержит ли переменная числовое значение?
Дело в том, что это, когда я извлекаю его из $ string, он действует как строковый тип, а IsNumeric возвращает false, поскольку он сравнивает его со всеми числовыми типами. и даже жесткий он будет содержать номер, вывод IsNumeric будет ложным.
Есть ли лучший способ проверить, содержит ли строка числовые значения?
Лучший ответ:
Вы можете использовать совпадение регулярного выражения, чтобы проверить это:
if($substring -match «^d+$») { # Do something }
Это должно работать для любой строки, которая содержит только цифры (т.е. является положительным целым числом). Измените шаблон на ^-?d+$ если вы хотите включить отрицательные целые числа.
Ответ №1
Правильный способ проверить, может ли данная строка быть преобразована в число:
[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
В regexd – проверка цифр
d * проверяет 0 на бесконечные цифры
D? Проверяет от 0 до 1 цифры
d {0,5} проверяет от 0 до 5 цифр
d+ проверяет наличие от 1 до бесконечных цифр
^ – начало линии
$ – конец строки
Так
^d+ $ будет проверять на 1 или более цифр от начала до конца строки и только цифры. Любой другой символ разорвет соединение от начала до конца и не будет найден.
Ответ №3
использовать -match ‘ d’
string = «some string that contains 123456 in the middle» $substring = $string.substring(27,9).Trim() $substring -match ‘d’ Ответ №4
Традиционный способ использования платформы.NET:
if( [Microsoft.VisualBasic.Information]::IsNumeric($myString) ) { # do something }