PowerShell에서 변수에 숫자 값이 있는지 테스트하려면 어떻게 해야 합니까?
PowerShell에서 변수에 숫자 값이 있는지 테스트하려면 어떻게 해야 합니까?
지금은 이렇게 하려고 하는데 항상 돌아오는 것 같아요.false
.
add-type -Language CSharpVersion3 @'
public class Helpers {
public static bool IsNumeric(object o) {
return o is byte || o is short || o is int || o is long
|| o is sbyte || o is ushort || o is uint || o is ulong
|| o is float || o is double || o is decimal
;
}
}
'@
filter isNumeric($InputObject) {
[Helpers]::IsNumeric($InputObject)
}
PS> 1 | isNumeric
False
할 수 .$val -is [int]
숫자 값에 대해 작동하지만 숫자가 따옴표로 묶인 경우에는 작동하지 않습니다.
1 -is [int]
True
"1" -is [int]
False
과 문열에서테하는경트우정사규수있다용습니할을식스을자숫자값▁the▁if▁for▁useion다▁and▁express▁a▁the▁string를 사용할 수 있습니다.-match
비교. Christian의 확인에입니다.그렇지 않으면 Christian의 답변은 유형 확인을 위한 좋은 해결책입니다.
function Is-Numeric ($Value) {
return $Value -match "^[\d\.]+$"
}
Is-Numeric 1.23
True
Is-Numeric 123
True
Is-Numeric ""
False
Is-Numeric "asdf123"
False
다음과 같은 작업을 수행할 수 있습니다.
$testvar -match '^[0-9]+$'
또는
$testvar -match '^\d+$'
온다아를 반환합니다.True
한다면$testvar
숫자입니다.
필터를 다음과 같이 수정합니다.
filter isNumeric {
[Helpers]::IsNumeric($_)
}
function
를 사용합니다.$input
하는 변수인 에 ""은 "variable"입니다.filter
변수 특변수사를 합니다.$_
현재 파이프라인 개체를 포함합니다.
편집:
파워셸 구문의 경우 필터(추가 유형 없음)만 사용할 수 있습니다.
filter isNumeric($x) {
return $x -is [byte] -or $x -is [int16] -or $x -is [int32] -or $x -is [int64] `
-or $x -is [sbyte] -or $x -is [uint16] -or $x -is [uint32] -or $x -is [uint64] `
-or $x -is [float] -or $x -is [double] -or $x -is [decimal]
}
문자열에 숫자 값이 있는지 확인하려면 다음 코드를 사용합니다.
$a = "44.4"
$b = "ad"
$rtn = ""
[double]::TryParse($a,[ref]$rtn)
[double]::TryParse($b,[ref]$rtn)
크레딧은 여기에 표시됩니다.
PS> Add-Type -Assembly Microsoft.VisualBasic
PS> [Microsoft.VisualBasic.Information]::IsNumeric(1.5)
True
http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.information.isnumeric.aspx
-is 및 -as 연산자에는 비교할 수 있는 유형이 필요합니다.유형이 확실하지 않으면 내용(부분 유형 목록)을 평가해 보십시오.
(Invoke-Expression '1.5').GetType().Name -match 'byte|short|int32|long|sbyte|ushort|uint32|ulong|float|double|decimal'
좋든 나쁘든 16진수 값에 대해서도 작동할 수 있습니다(Invoke-Expression '0xA'...).
filter isNumeric {
$_ -is [ValueType]
}
-
1 -is [ValueType]
True
"1" -is [ValueType]
False
-
function isNumeric ($Value) {
return $Value -is [ValueType]
}
isNumeric 1.23
True
isNumeric 123
True
isNumeric ""
False
isNumeric "asdf123"
False
-
(Invoke-Expression '1.5') -is [ValueType]
$itisint=$true
try{
[int]$vartotest
}catch{
"error converting to int"
$itisint=$false
}
문자열이 숫자를 나타내는지 여부를 테스트(예: 파일에서 읽음)할 수 있기 때문에 이 방법이 더 보편적입니다.변수에 "123"을 문자열로 사용할 경우 -is [int]를 사용하는 다른 솔루션은 false가 됩니다.이 기능은 5.1보다 오래된 파워셸이 있는 컴퓨터에서도 작동합니다.
이 스레드에 기여하고 수치 테스트 방법을 찾는 데 도움을 주신 모든 분께 감사드립니다.음의 숫자를 처리하는 방법에 대한 결과를 게시하고 싶습니다. 검색할 때 이 스레드를 찾을 수도 있는 사람들을 위해...
참고: 트림()을 사용하기 때문에 내 기능에는 문자열이 전달되어야 합니다.
function IsNumeric($value) {
# This function will test if a string value is numeric
#
# Parameters::
#
# $value - String to test
#
return ($($value.Trim()) -match "^[-]?[0-9.]+$")
}
있는 예: 테트예숫유 알있경는우고형을자할스예▁you(경▁as:우▁type▁if있는such▁numeric▁the▁you▁against테알):int
예를 들어, 아래 코드에서는) 다음과 같이 수행할 수 있습니다.
> [bool]("42" -as [int])
True
> [bool](42 -as [int])
True
> [bool]("hi" -as [int])
False
그러나 참고:
> [bool](42.1 -as [int])
True
조심!:
위의 코드가 식별하지 못하는 것으로 지적되었습니다.0
한 사람으로서int
▁guard에 가드를 .0
:
> $n -eq 0 -or $n -as [int]
어디에$n
테스트 중인 개체입니다.
읽기 호스트에서 입력 유효성 검사를 수행하는 동안 이 항목을 발견했습니다.변수에 대한 데이터 유형을 read-host 명령의 일부로 지정하려고 했는데 사용자가 해당 데이터 유형이 아닌 다른 데이터 유형을 입력하면 read-host 오류가 발생합니다.다음과 같은 방법으로 이 문제를 해결하고 사용자가 원하는 데이터 유형을 입력하도록 했습니다.
do
{
try
{
[int]$thing = read-host -prompt "Enter a number or else"
$GotANumber = $true
}
catch
{
$GotANumber = $false
}
}
until
($gotanumber)
"-123.456e-789" -match "^\-?(\d+\.?\d*)(e\-?\d+)?$|^0x[0-9a-f]+$"
또는
"0xab789" -match "^\-?(\d+\.?\d*)(e\-?\d+)?$|^0x[0-9a-f]+$"
숫자(숫자, 부동 소수점 및 16진수)를 확인합니다.
여기에서는 쉼표/도트가 수천 개의 구분 기호로 사용되는 경우는 다루지 않습니다.
각 숫자 유형에는 고유한 값이 있습니다.유형 코드 열거형 정의를 참조하십시오. https://learn.microsoft.com/en-us/dotnet/api/system.typecode?view=netframework-4.8 이 정보를 기준으로 모든 숫자 유형 값은 5에서 15 사이입니다.즉, 조건 검사를 다음과 같이 작성할 수 있습니다.
$typeValue = $x.getTypeCode().value__
if ($typeValue -ge 5 -and $typeValue -le 15) {"x has a numeric type!"}
값이 숫자인지 또는 숫자 값의 문자열 표현인지 여부를 검정합니다.
function Test-Number
{
Param
(
[Parameter(Mandatory=$true,
Position=0)]
[ValidatePattern("^[\d\.]+$")]
$Number
)
$Number -is [ValueType] -or [Double]::TryParse($Number,[ref]$null)
}
값이 숫자인지 여부를 검정하는 중입니다.
function Test-Number
{
Param
(
[Parameter(Mandatory=$true,
Position=0)]
[ValidatePattern("^[\d\.]+$")]
$Number
)
$Number -is [ValueType]
}
언급URL : https://stackoverflow.com/questions/10928030/in-powershell-how-can-i-test-if-a-variable-holds-a-numeric-value
'itsource' 카테고리의 다른 글
크롬의 입력 강조 표시/초점 테두리를 재설정/제거하는 방법은 무엇입니까? (0) | 2023.08.25 |
---|---|
Excel을 설치하지 않고 기본 XLS로 Delphi TDataSet을 내보내기 위한 오픈 소스 구성 요소 또는 장치 (0) | 2023.08.25 |
mysql stored-message에서 변수(로컬, 사용자 정의)를 선언하는 방법은 무엇입니까? (0) | 2023.08.25 |
명령줄을 사용하여 지정된 날짜 이후에 수정된 Windows에서 파일 찾기 (0) | 2023.08.25 |
저장 프로시저에서 출력 파라미터 크기를 정의하려면 어떻게 해야 합니까? (0) | 2023.08.20 |