cocoa - initialize - switch en swift 3
Comprueba NSString por caracteres especiales (5)
Quiero comprobar un NSString para caracteres especiales, es decir, cualquier cosa excepto az, AZ y 0-9.
No necesito verificar cuántos caracteres especiales están presentes, o sus posiciones, solo necesito saber si una cadena en particular contiene alguno o no. Si lo hace, entonces quiero poder mostrar "¡Error!", O algo similar.
Por ejemplo, jHfd9982 está bien pero asdJh992 @ no.
Además, las letras con acentos, signos diacríticos, etc. no deben permitirse.
¿Cómo voy a hacer esto?
¡Gracias!
Miguel
Aquí el código que puede usar para verificar la cadena tiene algún carácter especial o no
NSString *string = <your string>;
NSString *specialCharacterString = @"!~`@#$%^&*-+();:={}[],.<>?////"/'";
NSCharacterSet *specialCharacterSet = [NSCharacterSet
characterSetWithCharactersInString:specialCharacterString];
if ([string.lowercaseString rangeOfCharacterFromSet:specialCharacterSet].length) {
NSLog(@"contains special characters");
}
Desea buscar NSString utilizando un juego de caracteres si no encuentra ningún carácter en la cadena, entonces rangeOfCharacterFromSet: devolverá un rango de {NSNotFound, 0}
El conjunto de caracteres sería como [NSCharacterSet symbolCharacterSet] o tu propio conjunto. Tenga en cuenta que también puede invertir conjuntos de caracteres para que pueda tener un conjunto de caracteres aceptables
Este código solo permite números en la entrada UITextField.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([string rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location != NSNotFound)
return NO;
else
return YES;
}
Si desea eliminar caracteres especiales y números de cualquier cadena (incluso el texto del campo de texto), mientras está editando, estas líneas a continuación son bastante útiles:
#define ACCEPTABLE_CHARACTERS @"!~`@#$%^&*-+();:=_{}[],.<>?///|/"/'0123456789"
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSCharacterSet *cs = [NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
return (![string isEqualToString:filtered]) ? NO : YES;
}
NSCharacterSet * set = [[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ0123456789"] invertedSet];
if ([aString rangeOfCharacterFromSet:set].location != NSNotFound) {
NSLog(@"This string contains illegal characters");
}
También podría usar una expresión regular (esta sintaxis es de RegexKitLite: http://regexkit.sourceforge.net ):
if ([aString isMatchedByRegex:@"[^a-zA-Z0-9]"]) {
NSLog(@"This string contains illegal characters");
}