2010-06-17 9 views
16

İzin verilen karakterler (en az) A-Z, a-z, 0-9, ö, Ö, ä, ä, å, Å ve Almanca, letonca, estonca (varsa) özel karakterlerdir? Hazır yöntem var mı yoksa kara listeye mi (izin verilmeyen karakterlere) ve normal ifadelere IsMatch mi yapmalıyım? Kara listeyi nasıl kullanacağınız hazır değilse?Dize, C# /. NET 2.0 içinde alfa olmayan sayısal karakterler içerip içermediğini nasıl bulabilirim?

+0

http://stackoverflow.com/questions/2371780/ Göz önüne alınması gereken yanıtları içeren başka bir konu ek bilgi sağlayabilir. –

+0

[.net Normal İfadenin herhangi bir dilinden herhangi bir harfle eşleşmesi için olası bir kopyası] (http://stackoverflow.com/questions/2949861/net-regular-expression-to-match-any-kind-of-letter- herhangi bir dil) – GvS

cevap

30

Tüm bu dillerdeki özel karakterlerin nasıl kategorize edildiğini bilmiyorum, ancak Char.IsLetterOrDigit yönteminin ne yapmak istediğinizle eşleşip eşleşmediğini kontrol edebilirsiniz. En azından ben test rakamlar ve harfler için çalışır:

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

UppercaseLetter, LowercaseLetter, TitlecaseLetter, ModifierLetter, OtherLetter veya DecimalDigitNumber olarak Unicode içinde kategorize edilir karakterler için geçerlidir Char.IsLetterOrDigit döner.

+0

Ne test.All? Bu bir string metodu değil, bir çeşit uzatma metodu mu? Ya da bir LINQ yöntemi? – Task

+0

@Task 'All', dizenin linq uzantısıdır. Bkz. Http://msdn.microsoft.com/en-us/library/system.string.aspx – mydogisbox

+0

Ah! Belgelerin "Uzantı Yöntemleri" bölümü benim için yeni, daha önce bunu görmemiştim. Sanırım, daha önce "Properties" veya "Methods" alanında ihtiyacım olan her şeyi bulmaya alışıktım. Teşekkürler! – Task

5

Araştırmak char.IsLetterOrDigit(char). Örneğin

:

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

Sadece merak, ama neden bu downvoted oldu? Anlayabildiğim kadarıyla, OP'nin sorduğu şeyi yapmanın tam olarak geçerli bir yolu. – Flynn1179

+0

Ah .. daha yakın bir bakış vardı; oradaki 0-9 şartını asla fark etmedim.Sadece 'IsLetter' yerine 'IsLetterOrDigit' kullanmak için cevabımı değiştirdim. – Flynn1179

+0

Bunun için bir kısa yol 'myString.All (char.IsLetterOrDigit);' p {option} – gls123

4

karakterler için bir kara liste muhtemeldir oldukça büyük :-) Sen ondalık rakam ve harf maç için düzenli ifade

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

kullanabilirsiniz

bakılmaksızın komut dosyasının Bir "harfi" (BMP 46817) olarak sınıflandırılan her Unicode karakter içeren her (BMP, toplam 230), basamak ve \p{L} içerir -

Bu normal ifade kestirme \d ihtiva eden bir karakter sınıfı oluşur. Söz konusu karakter sınıfı daha sonra en az bir kez tekrarlanır ve ^ ve $ arasına gömülür - dize başlangıç ​​ve bitiş ankrajları, böylece tam dizeyle eşleşir. Bazı regex motorlar için

, Latin harflerle sadece ilgilendiğiniz beri, görünüşe göre, aynı zamanda Ancak

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

kullanabilirsiniz, .NET bu desteklemez. Yukarıda belirtilen ilk regex, komut dosyasında bir rakam veya harf olan her şeyi yakalar. Bu yüzden Hint veya Arap rakamları ve İbranice, Kiril ve Latin olmayan diğer yazılarla eşleşecek. İstediğinize bağlı olarak uygun olmayabilir.

Bu sorun çıkarsa, izin vermek istediğiniz karakterleri açıkça listelemekten daha iyi bir seçenek görmüyorum. Ancak, belirli bir dilde metnin her zaman bu dilin senaryosuyla sınırlı olduğunu varsaymayı tehlikeli buluyorum. Almanca bir metinde Çek veya Lehçe adı yazacak olsaydım, muhtemelen sadece [a-zA-ZäöüÄÖÜß]'dan daha fazlasına ihtiyacım olurdu.

+0

+1 teşekkürler! nasıl^[\ d \ p {L}] + $ nasıl çalıştığını açıklayabilir misiniz. Web'den kontrol ettim ama tamamen özetleyemedim ... –

+0

için –

-1

İzin verilen karakterlerle eşleşmesi yanlış bir dönüş yakalamak daha kolay olurdu.

İlgili konular