2011-08-24 16 views
6

Encuentro todo tipo de validaciones de número de teléfono en stackoverflow para el iphone, pero ninguno parece validar que parecen cambiar el formato. ejemplo Phone number formatting.IPhone simple número de teléfono de validación

Goles: este número se ingresa a través de una alerta. Norteamericano con o sin guiones.

por lo tanto, tenga un código, pero cada cosa es inválida como idea.

- (void)textFieldDidEndEditing:(UITextField *)textField { 

NSString *[email protected]"^\\+(?:[0-9] ?){6,14}[0-9]$"; 
NSPredicate *no=[NSPredicate predicateWithFormat:@"SELF MATCHES %@",str]; 
if([no evaluateWithObject:textField.text]==NO) 
    { 

     UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Warning" message:@"Please Enter correct contact no." delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil]; 

     [alert show]; 
     [alert release]; 

    } 
    else{ 
NSString *textValue = textField.text; 
NSLog(@"Value: %@", textValue); 
    } 
} 
+0

Realmente no debería limitarse a este tipo de validación: simplemente use una API JSON gratuita como numverify.com – Frank

Respuesta

3

En primer lugar, la validación del número de teléfono real es bastante complicada. ¿Se está limitando al NANP (Plan de numeración de América del Norte) o está buscando números E.164? Parece que intentas coincidir mayoritariamente con E.164, aunque este no suele ser el tipo de número al que la mayoría de las personas entraría.

Su coincidencia requiere un signo más, seguido de una secuencia de dígitos de entre siete y quince de largo con espacios opcionales entre ellos. ¿Es esto lo que quieres decir? ¿Qué cuerdas estás pasando?

Tenga en cuenta que a partir de iOS4, hay NSRegularExpression que es un poco mejor para esto que NSPredicate.

+0

OK Agregué esto: Metas: este número se ingresa a través de una alerta. Norteamericano con o sin guiones. Gracias – Rick

+3

Su expresión regular no se parece en nada a esto. Ni siquiera hay una pizca de eso. ¿Por qué crees que funcionaría? Busque en http://regexlib.com "NANP" para encontrar numerosas expresiones regulares para esto. Todos tienen varios intercambios. Recomiendo ser tan indulgente como sea posible de cualquier cosa que un ser humano te dé. –

+0

@ "^ \\ +? [0-9] * $" Este funciona. Divertido El primero en regexlib.com no en iOS pero sí en java android sdk. – Rick

26

EDIT: Leí la pregunta de nuevo y vi que quería validar, no resaltar el número de teléfono, así que pasé a la sección de NSDataDetector.

Puede utilizar NSDataDetector (que es una subclase especializado de NSRegularExpression) para buscar un número de teléfono en una NSString (este utiliza el teléfono por defecto algoritmo de detección de serie del iPhone, creo).

NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber 
                  error:&error]; 
NSUInteger numberOfMatches = [detector numberOfMatchesInString:string 
                 options:0 
                 range:NSMakeRange(0, [string length])]; 

Si utiliza un UITextView (pero probablemente no UITextField como se utiliza aquí), puede destacado un número de teléfono usando el teléfono por defecto algoritmo de detección de número del iPhone estableciendo su dataDetectorTypes propiedad:

textView.dataDetectorTypes = UIDataDetectorTypePhoneNumber; 

Consulte UIDataDetectorTypes para otros tipos de detectores de datos.

+0

Intenté NSDataDector y aunque no lo pude hacer funcionar, creo que este sería el camino a seguir. Cuando tenga más tiempo para jugar con él, lo cambiaré a este formato.Gracias – Rick

+0

¿Cómo no funciona NSDataDetector? –

+0

Oye, ¿esto funcionó para ti? –

0

Usando esta validación solo puede ingresar 10 números. Puede cambiar su longitud de acuerdo a sus requerimientos.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 

BOOL valid = [[NSPredicate predicateWithFormat:@"SELF MATCHES %@", REGEX_FOR_INTEGERS] evaluateWithObject:_textFieldValidate.text]; 



     if(valid){ 
      if(range.length + range.location > textField.text.length) 
      { 
       return NO; 
      } 

      NSUInteger newLength = [textField.text length] + [string length] - range.length; 
      return newLength <= 10; 


} 


return YES; 

} 

Espero que esto te ayude.

Cuestiones relacionadas