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;
}