PowerShell'de Bir Dizenin Yalnızca Sayı İçerip İçermediği Nasıl Kontrol Edilir?


Ekip üyelerimden biri, bir dizenin yalnızca sayısal karakterler içerip içermediğini kontrol etmek için bir PowerShell betiği arıyordu. Birkaç yöntem önerdim. Bu eğitimde, çeşitli yöntemler kullanarak PowerShell'de bir dizenin yalnızca sayı içerip içermediğini kontrol etmenin nasıl yapılacağını açıklayacağım.

PowerShell'de bir dizenin yalnızca sayılar içerip içermediğini kontrol etmek için -match operatörünü normal ifadeyle kullanabilirsiniz. Örneğin, bir posta kodunu doğrulamak için aşağıdaki kodu kullanabilirsiniz:

$zipCode = "12345"
if ($zipCode -match '^\d+$') {
    Write-Output "The string contains only numbers."
} else {
    Write-Output "The string contains non-numeric characters."
}

Burada ^\d+$normal ifade modeli, dizenin yalnızca baştan sona rakamlardan oluşmasını sağlar.

Size tüm yöntemleri örneklerle göstereyim:

Yöntem 1: Normal İfadeleri Kullanma

PowerShell'de dizelerdeki kalıpları eşleştirmek için Normal ifadeleri (regex) kullanabilirsiniz. PowerShell'de bir dizenin yalnızca sayısal karakterler içerip içermediğini belirlemek için -match operatörünü kullanabilirsiniz.

Bir örnekle anlayalım.

Örnek

Diyelim ki posta kodunu temsil eden ve yalnızca rakamlar içermesi gereken bir dizeniz var:

$zipCode = "12345"

if ($zipCode -match '^\d+$') {
    Write-Output "The string contains only numbers."
} else {
    Write-Output "The string contains non-numeric characters."
}

Bu örnekte, ^\d+$ normal ifade modeli, dizenin yalnızca başlangıçtan (^) sona ($) kadar rakamlar içerip içermediğini kontrol eder. Eğer dize bu kalıpla eşleşiyorsa, bu yalnızca sayıları içerdiği anlamına gelir.

Yukarıdaki PowerShell betiğini VS kodunu kullanarak çalıştırdım ve tam çıktıyı aşağıdaki ekran görüntüsünde görebilirsiniz.

PowerShell IsNullOrEmpty() Örneğini Okuyun

Yöntem 2: -replace Operatörünü Kullanma

PowerShell'de dizenin yalnızca sayılar içerip içermediğini kontrol etmek için size başka bir yöntem göstereyim.

Dizedeki tüm sayısal karakterleri kaldırmak ve ardından elde edilen dizenin boş olup olmadığını kontrol etmek için -replace operatörünü kullanabilirsiniz.

Size betiğin tamamını içeren bir örnek göstereyim.

Örnek

Sosyal Güvenlik Numarasını (SSN) temsil eden bir dize düşünün:

$ssn = "987654321"

if (($ssn -replace '\d', '') -eq '') {
    Write-Output "The string contains only numbers."
} else {
    Write-Output "The string contains non-numeric characters."
}

Burada -replace '\d', '' kısmı dizedeki tüm rakamları kaldırır. Ortaya çıkan dize boşsa (-eq ''), bu, orijinal dizenin yalnızca sayılar içerdiği anlamına gelir.

Yukarıdaki PowerShell betiğini yürüttükten sonra gerçek çıktının ekran görüntüsünü görebilirsiniz.

PowerShell'de Bir Dizenin Boşluk İçerip İçmediğini Kontrol Etmeye göz atın

Yöntem 3: Select-String Cmdlet'ini Kullanma

PowerShell'de, dizelerin içindeki kalıpları aramak için Select-String cmdlet'ini de kullanabilirsiniz. Bu yöntem özellikle dosyalarla veya daha büyük veri kümeleriyle çalışırken kullanışlıdır.

Örnek

Bir metin dosyasında saklanan çalışan kimliklerinin bir listesine sahip olduğunuzu ve bunların hepsinin yalnızca sayı içerdiğinden emin olmak istediğinizi varsayalım.

İşte PowerShell betiğinin tamamı.

$employeeIDs = Get-Content -Path "C:\Bijay\employeeIDs.txt"

foreach ($id in $employeeIDs) {
    if ($id -match '^\d+$') {
        Write-Output "$id is valid (contains only numbers)."
    } else {
        Write-Output "$id is invalid (contains non-numeric characters)."
    }
}

Burada, Get-Content dosyayı satır satır okur ve -match '^\d+$' modeli, yalnızca sayısal karakterler içerdiğinden emin olmak için her satırı kontrol eder.

PowerShell'i okuyun: IsNullOrEmpty vs IsNullOrWhiteSpace

Yöntem 4: TryParse Yöntemini Kullanma

Bir .Net yöntemini denemek istiyorsanız .Net odaklı bir yaklaşım kullanabilirsiniz.

Bir dizenin tam sayı olarak ayrıştırılıp ayrıştırılamayacağını doğrulamak için [int]::TryParse yöntemini kullanabilirsiniz.

Örnek

Burada herhangi bir biçimlendirme olmadan bir telefon numarasını temsil eden bir dize verilmiştir:

$phoneNumber = "2025550198"
$result = [int]::TryParse($phoneNumber, [ref]$null)

if ($result) {
    Write-Output "The string contains only numbers."
} else {
    Write-Output "The string contains non-numeric characters."
}

Bu örnekte, [int]::TryParse dizeyi bir tamsayı olarak ayrıştıracaktır. Başarılı olursa, dizenin yalnızca sayısal karakterler içerdiğini belirten $true değerini döndürür.

Yukarıdaki betiği çalıştırırsanız çıktıyı aşağıdaki ekran görüntüsünde görebilirsiniz:

Çözüm

Bu eğitimde size aşağıdaki gibi çeşitli yöntemleri kullanarak bir dizenin PowerShell'de yalnızca sayılar içerip içermediğini kontrol etmeyi nasıl kontrol edeceğinizi gösterdim:

  • Normal İfadeleri Kullanma
  • -replace Operatörünü Kullanmak
  • Select-String Cmdlet'ini Kullanma
  • TryParse Yöntemini Kullanma

Umarım bu örnekler bunu öğrenmenize yardımcı olur.

İlgili makaleler