iOS: Es allí una manera de comprobar si un NSArray objeto contiene un cierto carácter?

Necesito una manera de saber si una matriz tiene el carácter «@» en uno de sus objetos de cadena. El siguiente código, obviamente, no funciona porque comprueba si un objeto tiene el signo @ en lugar de comprobar si un objeto contiene el [email protected] Por ejemplo, si el usuario ha [email protected] mi declaración si no la detecta. Necesito a ver si un usuario dispone de un correo electrónico o no. He intentado investigar sobre cómo lograr esto en stackoverflow, pero no hubo suerte. Cualquier consejo o sugerencia será bienvenida.

if([answer containsObject:@"@"]){
  ///do function.                 
}
  • Tal vez algo con NSPredicate?
  • ¿Qué tipo de objetos se encuentran en la matriz?
  • Si los objetos son NSString (como la muestra sugiere), puede utilizar rangeOfString: para detectar una subcadena.
  • NSString, lo siento por no especificar.
InformationsquelleAutor user3606054 | 2014-06-17

4 Kommentare

  1. 8

    Puede comprobar si un NSArray contiene un objeto con containsObject. Si es un array de caracteres representados como cadenas de caracteres, entonces el código es sencillo:

    NSArray *array = @[@"a", @"b", @"c", @"d"];
    BOOL contains = [array containsObject:@"c"];

    No hay tal cosa como un NSArray de tipos escalares como ‘c’ char, ya que el NS colecciones contienen sólo los objetos. Lo más cercano a un array de caracteres es un NSString, que tiene una variedad de formas para saber si un personaje está presente. El más sencillo se parece a esto:

    NSString *string = @"[email protected]";
    NSRange range = [string rangeOfString:@"c"];
    BOOL contains = range.location != NSNotFound;
  2. 6

    Tienes que recorrer cada una de las NSString en la matriz y comprobar si contiene la subcadena.

    Este método personalizado se muestra cómo:

    //assumes all objects in the array are NSStrings
    - (BOOL)array:(NSArray *)array containsSubstring:(NSString *)substring {
    
        BOOL containsSubstring = NO;
    
        for (NSString *string in array) {
    
            if ([string rangeOfString:substring].location != NSNotFound) {
                containsSubstring = YES;
                break;
            }
        }
        return containsSubstring;
    }

    Uso:

    NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:3];
    [array addObject:@"hi"];
    [array addObject:@"yo"];
    [array addObject:@"[email protected]"];
    
    BOOL containsSubstring = [self array:array containsSubstring:@"@"];
  3. 2

    Podría crear una Categoría personalizada clase de NSArray y agregue el método siguiente:

    - (BOOL) containsCharacter:(NSString *) character
    {
        BOOL characterFound = NO;
        for (id object in self)
        {
            if ([object isKindOfClass:[NSString class]])
            {
                NSRange range = [object rangeOfString:character];
                if (range.location != NSNotFound)
                {
                    characterFound = YES;
                    break;
                }
            }
        }
    
        return characterFound;
    }

    Gracias,
    Michael

    • también una gran opción. Para hacer una categoría: Archivo > Nuevo Archivo > Objetivo-C Categoría > Establecer el nombre de la Categoría para lo que sea y, a continuación, seleccione NSArray para la clase
  4. 0

    Creo que es la mejor forma de utilizar predicados para el filtrado de su matriz como Larme dijo.

    Intentar algo como esto:

    NSArray *answer = @[@"John Appleseed", @"[email protected]", @"[email protected]", @"+14120123456", @"[email protected]", @"[email protected]@@invalid.email"];
    NSArray *filteredArray = [answer filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF CONTAINS \"@\""]];
    if (filteredArray.count > 0) {
        //Do something
    }

    La filteredArray le contiene todos los objetos, que contiene al-símbolo:

    [email protected].com,
    [email protected].com,
    [email protected],
    [email protected]@@invalid.email

    De otra manera – es la matriz de filtro por correo electrónico válida cadenas y no sólo en el símbolo de:

    NSArray *answer = @[@"John Appleseed", @"[email protected]", @"[email protected]", @"+14120123456", @"[email protected]", @"[email protected]@@invalid.email"];
    NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    NSArray *filteredArray = [answer filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]];
    if (filteredArray.count > 0) {
        //Do something
    }

    La filteredArray se contiene sólo los objetos, que se adapte al correo electrónico de la máscara de

    [email protected].com,
    [email protected].com

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea