validar solo saber regulares regular numeros letras letra expresiones expresion especiales contiene comprobar caracteres alfanumericos ios objective-c

ios - saber - Compruebe si NSString contiene solo caracteres alfanuméricos+guiones bajos



validar alfanumericos expresion regular (7)

Algo más fácil,

NSMutableCharacterSet *allowedSet = [NSMutableCharacterSet characterSetWithCharactersInString:@"_"]; [allowedSet formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]]; NSCharacterSet *forbiddenSet = [allowedSet invertedSet];

Combinará alfanumérico junto con _underscore.

puedes usarlo como,

NSRange r = [string rangeOfCharacterFromSet:forbiddenSet]; if (r.location != NSNotFound) { NSLog(@"the string contains illegal characters"); }

PD. ejemplo copiado del ejemplo @DaveDeLong :)

Tengo una cadena que debe ser solo az, 0-9 y _

¿Cómo puedo verificar si la entrada es válida? Lo he intentado pero acepta letras como å, ä, ö, ø, etc.

NSString *string = [NSString stringWithString:nameField.text]; NSCharacterSet *alphaSet = [NSCharacterSet alphanumericCharacterSet]; [string stringByTrimmingCharactersInSet:alphaSet]; [string stringByReplacingOccurrencesOfString:@"_" withString:@""]; BOOL valid = [[string stringByTrimmingCharactersInSet:alphaSet] isEqualToString:@""];


Así es como puedes hacerlo en Swift (como una extensión de la clase String):

extension String { func containsValidCharacters() -> Bool { var charSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_") charSet = charSet.invertedSet let range = (self as NSString).rangeOfCharacterFromSet(charSet) if range.location != NSNotFound { return false } return true } }


Cree su propio conjunto de caracteres usando [NSCharacterSet characterSetWithCharactersInString:] , luego recorte como estaba haciendo para ver si la cadena devuelta tiene un valor de longitud.

O puede usar invertedSet para eliminar todos los caracteres no configurados, si eso ayudara a producir una cadena limpia.


Podría recorrer todos los caracteres de la cadena y verificar que sea alfanumérica:

BOOL isMatch = YES; for (int i = 0; i < [string length]; i++) { unichar c = [string characterAtIndex:i]; if (!isalnum(c) && c != ''_'') { isMatch = NO; break; } } if (isMatch) { // valid } else { // invalid }


Puedes crear tu propio conjunto de caracteres:

NSCharacterSet *s = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"];

Una vez que tienes eso, lo inviertes a todo lo que no está en tu cadena original:

s = [s invertedSet];

Y luego puede usar un método de cadena para encontrar si su cadena contiene algo en el conjunto invertido:

NSRange r = [string rangeOfCharacterFromSet:s]; if (r.location != NSNotFound) { NSLog(@"the string contains illegal characters"); }


Puedes usar un predicado:

NSString *myRegex = @"[A-Z0-9a-z_]*"; NSPredicate *myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", myRegex]; NSString *string = nameField.text; BOOL valid = [myTest evaluateWithObject:string];

Editar: No noté que estás usando [NSString stringWithString:nameField.text] .

Use nameField.text en nameField.text lugar.


este es un ayudante rápido si ayuda

-(BOOL)isString:(NSString *)s{ char letter = ''A''; //BOOL isLetter=NO; for (int i=0; i<26; i++) { NSString *temp = [NSString stringWithFormat:@"%c",letter+i]; if ([s isEqualToString:temp]) { return YES; } } return NO; }