2010-07-20 15 views
5

Girdemin belirli bir dizgi olup olmadığını nasıl kontrol edebilirim. Sayısal yok, yok "/", ...Dize girdisi içeriğinin kontrol edilmesi

+0

D o herhangi bir şans ile dizgenin yerine alfabetik (sadece harf) anlamına mı geliyor? – BoltClock

+1

Yani, "Bir dizginin yalnızca karakter içerip içermediğini nasıl kontrol edebilirim?" –

+1

Sadece alfanümerik karakterlerden oluşan bir dize mi demek istiyorsun? Tam olarak hangi karakterleri tanımlayabilir misiniz? –

cevap

15

Eh, bir giriş aslında tip System.String bir nesne olup olmadığını kontrol etmek, sadece yapabilirsiniz:

bool IsString(object value) 
{ 
    return value is string; 
} 

bir string yalnızca harf içerdiğini kontrol etmek için, böyle bir şey yapabileceğini:

bu birleştirmek istiyorsa
bool IsAllAlphabetic(string value) 
{ 
    foreach (char c in value) 
    { 
     if (!char.IsLetter(c)) 
      return false; 
    } 

    return true; 
} 

, bunu yapabilirdi:

bool IsAlphabeticString(object value) 
{ 
    string str = value as string; 
    return str != null && IsAllAlphabetic(str); 
} 
+1

Her ikisine de örnek olarak, başlık ve soru tam olarak eşleşmiyor. – corsiKa

6

Tam olarak ne istediğinizi tam olarak açıklayamıyorsunuz, ancak bunu normal bir ifadeyle yapabilirsiniz. , Ayrıca boşluk izin vermek istiyorsanız

string s = "dasglakgsklg"; 
if (Regex.IsMatch(s, "^[a-z]+$", RegexOptions.IgnoreCase)) 
{ 
    Console.WriteLine("Only letters in a-z."); 
} 
else 
{ 
    // Not only letters in a-z. 
} 

altını ya da diğer karakterler sadece normal ifadede köşeli parantezler arasına ekleyin: Örneğin dize Bunu yapmanın bir z ya AZ sadece harfler içerip içermediğini kontrol etmek . Bazı karakterlerin normal ifade karakter sınıfları içinde özel bir anlamı olduğunu ve ters eğik çizgi ile kaçması gerektiğini unutmayın.

Ayrıca, [a-z] yerine \p{L}, yabancı alfabelerde harfler de dahil olmak üzere bir harf olarak kabul edilen herhangi bir Unicode karakteriyle eşleşmesi için de kullanabilirsiniz.

1

Böyle bir şey (test edilmemiş) sizin (belirsiz) gereksinimlerinize uyabilir.

2
using System.Linq; 
... 

bool onlyAlphas = s.All(c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')); 
+1

+1! – Aren

+1

-1 acımasız olmak için – Luiscencio

+0

Beni yanlış anlama: regex, kullanımları vardır. Ancak bunun gibi basit, tek geçişli bir algoritma için, bu aşırı bir sıkıntı. Yine de Reed'in cevabını daha çok seviyorum. Char.IsLetter' hakkında bilmiyordum. – StriplingWarrior

10

Eğer demek istediğin

if (input is string) 
{ 
    // test for legal characters? 
    string pattern = "^[A-Za-z]+$"; 
    if (Regex.IsMatch(input, pattern)) 
    { 
     // legal string? do something 
    } 

    // or 
    if (input.Any(c => !char.IsLetter(c))) 
    { 
     // NOT legal string 
    } 
} 
"tamamen harfleri dizedir", bunu yapabilirsiniz:

string myString = "RandomStringOfLetters"; 
bool allLetters = myString.All(c => Char.IsLetter(c)); 

Bu LINQ ve Char.IsLetter yöntemine dayanmaktadır.

+1

bu harika =) – Luiscencio

+0

Char.IsLetter yerelleştirme ile nasıl çalışır? – ahsteele

+0

@ahsteele: Aslında System.Globalization.CharUnicodeInfo, bunu latin olmayan karakterler için ele alır. –

İlgili konular