medio guion correos con bajo ios objective-c uitextfield

ios - correos - ¿Cómo puedo restringir los caracteres especiales en UITextField excepto los puntos y los guiones bajos?



correos con guion medio (9)

Solución Swift 3.1

let ACCEPTABLE_CHARACTERS = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_." func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { let cs = CharacterSet(charactersIn: ACCEPTABLE_CHARACTERS).inverted let filtered: String = (string.components(separatedBy: cs) as NSArray).componentsJoined(by: "") return (string == filtered) }

¿Cómo puedo restringir los caracteres especiales en un UITextField excepto los puntos y los guiones bajos?

He intentado el fragmento de código a continuación, pero sin suerte:

#define ACCEPTABLE_CHARECTERS @" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_." - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSCharacterSet *acceptedInput = [NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARECTERS]; if (![[string componentsSeparatedByCharactersInSet:acceptedInput] count] > 1){ NSLog(@"not allowed"); return NO; } else{ return YES; } }


Esto puede ayudarte a probar esto ... y házmelo saber, por favor.

-(BOOL)isHaveSpecialChar:(NSString*)str{ NSString *customStr = @"~`!@#$%^&*()+=-/;:/"/'{}[]<>^?, "; NSCharacterSet *alphaSet = [NSCharacterSet characterSetWithCharactersInString:customStr]; BOOL isHaveSpecialChar = [[str stringByTrimmingCharactersInSet:alphaSet] isEqualToString:@""]; return !isHaveSpecialChar; }


Prueba el bloque de código dado a continuación, funcionó bien para mí.

SWIFT 3.0

let ACCEPTABLE_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_" func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { let cs = NSCharacterSet(charactersIn: ACCEPTABLE_CHARACTERS).inverted let filtered = string.components(separatedBy: cs).joined(separator: "") return (string == filtered) }

C objetivo

#define ACCEPTABLE_CHARACTERS @" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_." - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS] invertedSet]; NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; return [string isEqualToString:filtered]; }

Espero que funcione para ti también.


Prueba esto

NSCharacterSet *set= [NSCharacterSet symbolCharacterSet]; if ([string rangeOfCharacterFromSet:[set invertedSet]].location == NSNotFound) { // valid } else { // invalid }

puedes hacer tu propio set con

NSCharacterSet *set= [NSCharacterSet characterSetWithCharactersInString:@"<all your symbols you want to ignore>"];


Prueba esto:

NSString *str = @"___asdf.SHiv._.l.asg. g.g._ASdgASG_.......asfgads.g. .._____fdgdsfghsdfgh"; str= [str stringByReplacingOccurrencesOfString:@"." withString:@""]; str=[str stringByReplacingOccurrencesOfString:@"_" withString:@""]; str=[str stringByReplacingOccurrencesOfString:@" " withString:@""]; str=[str stringByTrimmingCharactersInSet:[NSCharacterSet alphanumericCharacterSet]]; if ([str isEqualToString:@""]) { NSLog(@"valid"); } else { NSLog(@"invalid"); }


Swift 2.2 basado en la respuesta de Mrunal :

let notAllowedCharacters = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_."; func textField( textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { let set = NSCharacterSet(charactersInString: notAllowedCharacters); let inverted = set.invertedSet; let filtered = string .componentsSeparatedByCharactersInSet(inverted) .joinWithSeparator(""); return filtered == string; }


NSString *Regex = @"[A-Za-z0-9^]*";

NSPredicate *TestResult = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", Regex];

[TestResult evaluateWithObject:@"YourTestString"];

Último retorno valor booleano verdadero / falso

En metodo

+ (BOOL) validateSpecialCharactor: (NSString *) text { NSString *Regex = @"[A-Za-z0-9^]*"; NSPredicate *TestResult = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", Regex]; return [TestResult evaluateWithObject:text]; }


Swift 4

let RISTRICTED_CHARACTERS = "''*=+[]//|;:''/",<>/?%"

Método de delegado de UITextField:

func textField(_ textField: UITextField, shouldChangeCharactersIn _: NSRange, replacementString string: String) -> Bool { let set = CharacterSet(charactersIn: RISTRICTED_CHARACTERS) let inverted = set.inverted let filtered = string.components(separatedBy: inverted).joined(separator: "") return filtered != string }


func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { let set = NSCharacterSet(charactersIn: "0123456789") let inverted = set.inverted; let filtered = string.components(separatedBy: inverted).joined(separator: "") return filtered == string;