2010-07-20 38 views
5

Làm cách nào để kiểm tra xem đầu vào của tôi có phải là loại chuỗi cụ thể không. Vì vậy, không có số, không "/", ...kiểm tra nội dung của chuỗi nhập

+0

D o bạn bởi bất kỳ cơ hội có nghĩa là chữ cái (chỉ chữ cái) thay vì chuỗi? – BoltClock

+1

Ý của bạn là "Làm cách nào để kiểm tra xem chuỗi có chứa các ký tự không?" –

+1

Bạn có nghĩa là một chuỗi chỉ bao gồm các ký tự chữ và số không? Bạn có thể xác định những nhân vật chính xác? –

Trả lời

15

Vâng, để kiểm tra xem một đầu vào thực sự là một đối tượng kiểu System.String, bạn chỉ có thể làm:

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

Để kiểm tra xem một string chỉ chứa chữ cái, bạn có thể làm một cái gì đó như thế này:

bool IsAllAlphabetic(string value) 
{ 
    foreach (char c in value) 
    { 
     if (!char.IsLetter(c)) 
      return false; 
    } 

    return true; 
} 

Nếu bạn muốn kết hợp này, bạn có thể làm như vậy:

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

Ví dụ tốt về cả hai, là tiêu đề và câu hỏi không khớp chính xác. – corsiKa

6

Nó không hoàn toàn rõ ràng những gì bạn muốn, nhưng bạn có thể làm điều đó với một biểu thức chính quy. Ví dụ để kiểm tra xem chuỗi của bạn chỉ chứa chữ cái trong az hoặc AZ bạn có thể làm điều này:

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. 
} 

Nếu bạn cũng muốn cho phép không gian, gạch dưới, hay các nhân vật khác chỉ cần thêm chúng giữa các dấu ngoặc vuông trong biểu thức chính quy . Lưu ý rằng một số ký tự có ý nghĩa đặc biệt bên trong các lớp ký tự biểu thức chính quy và cần phải được thoát bằng dấu gạch chéo ngược.

Bạn cũng có thể sử dụng \p{L} thay vì [a-z] để khớp với bất kỳ ký tự Unicode nào được coi là chữ cái, kể cả chữ cái trong bảng chữ cái nước ngoài.

1

Một cái gì đó như thế này (chưa được kiểm tra) có thể phù hợp với yêu cầu (mơ hồ) của bạn.

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 
    } 
} 
2
using System.Linq; 
... 

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

+1 không sử dụng regex! – Aren

+1

-1 vì bị tàn bạo – Luiscencio

+0

Đừng làm cho tôi sai: regex có sử dụng của nó. Nhưng đối với một thuật toán đơn giản, đơn giản như thế này, nó quá mức cần thiết. Tuy nhiên, tôi thích câu trả lời của Reed hơn. Không biết về 'Char.IsLetter'. – StriplingWarrior

10

Nếu bạn có ý nghĩa "là chuỗi hoàn toàn thư", bạn có thể làm:

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

này được dựa trên LINQ và Char.IsLetter phương pháp.

+1

đây là cool =) – Luiscencio

+0

Char.IsLetter hoạt động như thế nào với nội địa hóa? – ahsteele

+0

@ahsteele: Nó thực sự là System.Globalization.CharUnicodeInfo để xử lý điều này cho các ký tự không phải latin. –

Các vấn đề liên quan