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:@""];
}