2011-08-20 24 views

Respuesta

13

Un enfoque sería usar expresiones regulares: la clase NSRegularExpression. A continuación se muestra cómo puede detectar cualquier letras en inglés, pero el patrón podría modificarse para que coincida solo si toda la cadena consta de tales letras. Algo así como ^[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. 
} 

Como alternativa, puede construir un NSCharacterSet que contiene los caracteres que le interesa y utilizar NSString 's rangeOfCharacterFromSet: para encontrar la primera aparición de cualquiera. Debo señalar que este método solo encuentra el primer carácter en la cadena. Tal vez no es lo que buscas.

Finalmente, siento que podría hacer algo con las codificaciones, pero no he pensado tanto. Quizás determine si la cadena se puede representar utilizando ASCII (usando canBeConvertedToEncoding:) y luego verifique los números/símbolos.

¡Oh, y siempre puedes repetir la cadena y verificar cada carácter! :)

0

Usted puede utilizar la clase NSRegularExpression (documentación de Apple en la clase se puede ver here)

1

También es posible usar NSCharacterSet y utilizar el rangeOfCharacterFromSet: método para ver si el NSRange devuelto es toda la gama de la cadena. characterSetWithRange sería un buen lugar para comenzar a crear su characterSet.

4

Puede usar la prueba simple NSPredicate.

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