2011-08-20 16 views

Odpowiedz

13

Jednym ze sposobów jest użycie wyrażeń regularnych - klasa NSRegularExpression. Poniżej przedstawiono, w jaki sposób można wykryć angielskie litery, ale wzór może zostać zmodyfikowany, aby pasował tylko wtedy, gdy cały ciąg składa się z takich liter. Coś jak ^[a-zA-Z]*$.

NSRegularExpression *regex = [[[NSRegularExpression alloc] 
    initWithPattern:@"[a-zA-Z]" options:0 error:NULL] autorelease]; 

// Assuming you have some NSString `myString`. 
NSUInteger matches = [regex numberOfMatchesInString:myString options:0 
    range:NSMakeRange(0, [myString length])]; 

if (matches > 0) { 
    // `myString` contains at least one English letter. 
} 

Alternatywnie, można skonstruować NSCharacterSet zawierający znaki, które Cię interesują i używać NSString „s rangeOfCharacterFromSet: aby znaleźć pierwsze wystąpienie jednego. Powinienem zauważyć, że ta metoda znajduje tylko pierwszy taki znak w ciągu znaków. Może nie to, czego szukasz.

Wreszcie, czuję, że można coś zrobić z kodowaniem, ale nie zastanawiałem się zbyt wiele. Być może określić, czy ciąg znaków może być reprezentowany za pomocą ASCII (przy użyciu canBeConvertedToEncoding:), a następnie sprawdzić numery/symbole?

Aha, i zawsze możesz powtórzyć ciąg i sprawdzić każdą postać! :)

0

Można użyć NSRegularExpression Class (dokumentacja Apple od klasy mogą być oglądane here)

1

Można również użyć NSCharacterSet i użyć rangeOfCharacterFromSet: Metoda aby sprawdzić, czy wrócił NSRange jest cała gama łańcucha. characterSetWithRange byłby dobrym miejscem do rozpoczęcia tworzenia swojej postaci.

4

Możesz użyć prostego testu NSPredicate.

NSString *str = @"APPLE"; 
NSString *regex = @"[A-Z]+"; 
NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; 
BOOL result = [test evaluateWithObject:str]; 
Powiązane problemy