2010-06-17 24 views
16

Ký tự được phép là (ít nhất) ký tự đặc biệt A-Z, a-z, 0-9, ö, Ö, ä, ä, å, Å và tiếng Đức, latvian, dân eston (nếu có)? Có phương pháp làm sẵn hay tôi phải tạo danh sách đen (ký tự không được phép) và biểu thức chính quy IsMatch? Nếu không có sẵn sàng làm thế nào để sử dụng danh sách đen?Cách tìm hiểu xem chuỗi có chứa các ký tự số không phải alpha trong C# /. NET 2.0 không?

+0

Một chuỗi khác có câu trả lời để xem xét http://stackoverflow.com/questions/2371780/ Có thể cung cấp thông tin chi tiết bổ sung. –

+0

có thể trùng lặp của [. Regular Expression để khớp với bất kỳ loại chữ nào từ bất kỳ ngôn ngữ nào] (http://stackoverflow.com/questions/2949861/net-regular-expression-to-match-any-kind-of-letter- từ bất kỳ ngôn ngữ nào) – GvS

Trả lời

30

Tôi không biết các ký tự đặc biệt từ tất cả các ngôn ngữ đó được phân loại như thế nào, nhưng bạn có thể kiểm tra xem phương thức Char.IsLetterOrDigit có khớp với những gì bạn muốn làm hay không. Nó hoạt động ít nhất là cho các chữ số và chữ tôi thử nghiệm:

string test = "Aasdf345ÅÄÖåäöéÉóÓüÜïÏôÔ"; 
if (test.All(Char.IsLetterOrDigit)) { ... } 

Các Char.IsLetterOrDigit trả về true cho các ký tự được phân loại trong Unicode như UppercaseLetter, LowercaseLetter, TitlecaseLetter, ModifierLetter, OtherLetter, hoặc DecimalDigitNumber.

+0

Bài kiểm tra là gì.Tất cả? Đó không phải là một phương pháp chuỗi, nó là một số loại phương pháp mở rộng? Hoặc một phương pháp LINQ? – Task

+0

@Task 'Tất cả' là phần mở rộng của chuỗi. Xem http://msdn.microsoft.com/en-us/library/system.string.aspx – mydogisbox

+0

Ah! Phần "Phương pháp mở rộng" của tài liệu là mới đối với tôi, tôi chưa từng thấy điều đó trước đây. Tôi đoán tôi đã quá quen với việc tìm mọi thứ tôi cần trong khu vực "Thuộc tính" hoặc "Phương pháp" trước đó. Cảm ơn! – Task

5

Điều tra char.IsLetterOrDigit(char).

Ví dụ:

myString.All(c => char.IsLetterOrDigit(c)); 
+1

Chỉ tò mò, nhưng tại sao điều này lại bị bỏ rơi? Theo như tôi có thể nói đó là một cách hoàn toàn hợp lệ để làm những gì OP hỏi. – Flynn1179

+0

Ah .. chỉ có một cái nhìn gần hơn; không bao giờ nhận thấy yêu cầu 0-9 trong đó.Tôi đã sửa đổi câu trả lời của mình để sử dụng 'IsLetterOrDigit' thay vì chỉ' IsLetter'. – Flynn1179

+0

Một cách viết tắt cho điều này là 'myString.All (char.IsLetterOrDigit); ' – gls123

4

Một danh sách đen cho nhân vật có khả năng :-) khá lớn

Bạn có thể sử dụng các biểu thức chính quy

^[\d\p{L}]+$ 

để phù hợp với chữ số thập phân và chữ cái, không phân biệt của tập lệnh.

Cụm từ thông dụng này bao gồm một lớp ký tự có chứa ký tự viết tắt \d - có chứa mọi chữ số (tổng cộng 230 trong BMP) và \p{L} chứa mọi ký tự Unicode được phân loại là "chữ" (46817 trong BMP). Lớp nhân vật được cho biết sau đó được lặp lại ít nhất một lần và được nhúng giữa ^$ - chuỗi bắt đầu và kết thúc neo, do đó, nó khớp với chuỗi hoàn chỉnh.

Đối với một số công cụ regex, vì bạn chỉ quan tâm bằng chữ Latin, rõ ràng, bạn cũng có thể sử dụng

^[\d\p{Letter}]+$ 

Tuy nhiên, .NET không hỗ trợ này. Regex đầu tiên được đề cập ở trên thực sự nắm bắt mọi thứ là chữ số hoặc chữ cái trong bất kỳ tập lệnh nào. Vì vậy, nó sẽ kết hợp chặt chẽ với các chữ số Ấn Độ hoặc Ả Rập và tiếng Do Thái, Cyrillic và các tập lệnh phi Latin khác. Tùy thuộc vào những gì bạn muốn điều này có thể không thích hợp.

Nếu điều đó đặt ra vấn đề, thì tôi không thấy lựa chọn nào tốt hơn là liệt kê rõ ràng các ký tự bạn muốn cho phép. Tuy nhiên, tôi cho rằng thật nguy hiểm khi giả định rằng văn bản bằng một ngôn ngữ nhất định luôn bị hạn chế đối với tập lệnh của ngôn ngữ đó. Nếu tôi viết tên Séc hoặc Ba Lan bằng văn bản tiếng Đức, thì tôi có thể cần nhiều hơn chỉ là [a-zA-ZäöüÄÖÜß].

+0

+1 cho tùy chọn \ p {option} –

+0

cảm ơn! bạn có thể giải thích cách^[\ d \ p {L}] + $ công trình không. Tôi đã kiểm tra trên web nhưng tôi không thể tổng hợp hoàn toàn ... –

-1

Sẽ đơn giản hơn để phù hợp với các ký tự được cho phép để nhận được số tiền hoàn trả sai.

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