ios objective-c string cocoa-touch nsstring

Eliminar todos los caracteres no numéricos de una NSString, manteniendo espacios



objective-c cocoa-touch (7)

Para Swift 3.0.1 personas

var str = "1 3 6 .599.188-99 " str.replacingOccurrences(of: "[^0-9]", with: "", options: .regularExpression, range: nil)

Salida: "13659918899"

Esto también recorta espacios de la cadena

Estoy tratando de eliminar todos los caracteres no numéricos de una NSString , pero también necesito mantener los espacios. Esto es lo que he estado usando.

NSString *strippedBbox = [_bbox stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [_bbox length])];

Si le doy una NSString de Test 333 9599 999 , devolverá 3339599999 pero necesito mantener los espacios en.

¿Cómo puedo hacer esto?


En resumen, puede usar NSCharacterSet para examinar solo los caracteres que le interesan e ignorar el resto.

- (void) stripper { NSString *inString = @"A1 B2 C3 D4"; NSString *outString = @""; for (int i = 0; i < inString.length; i++) { if ([[NSCharacterSet whitespaceCharacterSet] characterIsMember:[inString characterAtIndex:i]] || [[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[inString characterAtIndex:i]]) { outString = [outString stringByAppendingString:[NSString stringWithFormat:@"%c",[inString characterAtIndex:i]]]; } } }


Podría alterar su primera expresión regular para incluir un espacio después del 9:

En veloz:

var str = "test Test 333 9599 999"; val strippedStr = str.stringByReplacingOccurrencesOfString("[^0-9 ]", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range:nil); // strippedStr = " 33 9599 999"

Si bien esto deja el espacio inicial, podría aplicar un recorte de espacios en blanco para lidiar con eso:

strippedStr.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) // strippedStr = "33 9599 999"


Se hace fácilmente creando un conjunto de caracteres de los personajes que desea conservar y utilizando invertedSet para crear un conjunto "todos los demás". Luego divida la cadena en una matriz separada por cualquier carácter en este conjunto y vuelva a ensamblar la cadena nuevamente. Suena complicado pero muy simple de implementar:

NSCharacterSet *setToRemove = [NSCharacterSet characterSetWithCharactersInString:@"0123456789 "]; NSCharacterSet *setToKeep = [setToRemove invertedSet]; NSString *newString = [[someString componentsSeparatedByCharactersInSet:setToKeep] componentsJoinedByString:@""];

resultado: 333 9599 99


intenta usar NSScanner

NSString *originalString = @"(123) 123123 abc"; NSMutableString *strippedString = [NSMutableString stringWithCapacity:originalString.length]; NSScanner *scanner = [NSScanner scannerWithString:originalString]; NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789 "]; while ([scanner isAtEnd] == NO) { NSString *buffer; if ([scanner scanCharactersFromSet:numbers intoString:&buffer]) { [strippedString appendString:buffer]; } else { [scanner setScanLocation:([scanner scanLocation] + 1)]; } } NSLog(@"%@", strippedString); // "123123123"


// Our test string NSString* _bbox = @"Test 333 9599 999"; // Remove everything except numeric digits and spaces NSString *strippedBbox = [_bbox stringByReplacingOccurrencesOfString:@"[^//d ]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [_bbox length])]; // (Optional) Trim spaces on either end, but keep spaces in the middle strippedBbox = [strippedBbox stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; // Print result NSLog(@"%@", strippedBbox);

Esto imprime 333 9599 999 , que creo que es lo que estás buscando. También elimina los caracteres no numéricos que pueden estar en el medio de la cadena, como los paréntesis.


NSMutableString strippedBbox = [_bbox mutableCopy]; NSCharacterSet* charSet = [NSCharacterSet characterSetWithCharactersInString:@"1234567890 "].invertedSet; NSUInteger start = 0; NSUInteger length = _bbox.length; while(length > 0) { NSRange range = [strippedBbox rangeOfCharacterFromSet:charSet options:0 range:NSMakeRange(start, length)]; if(range.location == NSNotFound) { break; } start += (range.location + range.length); length -= range.length; [strippedBbox replaceCharactersInRange:range withString:@""]; }