2012-09-24 21 views
5

Necesito determinar si un texto es una dirección de correo electrónico, o un número de móvil, para la dirección de correo electrónico puedo usar alguna expresión regular, para un número móvil Puedo verificar si la cadena tiene solo dígitos (¿no?iOS: ¿cómo verificar si una cadena tiene solo dígitos?

y el secuencia es como:

is (regex_valid_email(text)) 
{ 
    // email 
} 
else if (all_digits(text)) 
{ 
    // mobile number 
} 

pero ¿cómo puedo verificar si una cadena tiene solo números en iOS?

Gracias

+1

Para el segundo bit. posible duplicado de [Cómo comprobar si NSString es numérico o no] (http://stackoverflow.com/questions/2020360/how-to-check-if-nsstring-is-numeric-or-not) que es en sí mismo un engaño de http://stackoverflow.com/questions/1320295/iphone-how-to-check-that-a-string-is-numeric-only - mira la próxima vez antes de preguntar, realmente no queremos un millón de copias de cada pregunta :-) – paxdiablo

+0

Para el primer bit, está bien establecido que la expresión regular capaz de hacer correos electrónicos correctamente es de aproximadamente 27 mil millones de caracteres de longitud :-) La mejor manera de consultar un correo electrónico es enviarle algo con un enlace que sea requiere ser seleccionado. No todas las direcciones de correo electrónico legales son válidas. – paxdiablo

+0

¿Qué sucede si el número de teléfono contiene guiones? ¿O paréntesis? – borrrden

Respuesta

10

se crea un NSCharacterSet que incluye los dígitos y, probablemente, el guión y tal vez paréntesis (dependiendo de qué formato se está viendo los números de teléfono). Luego inviertes ese conjunto, por lo que tienes un conjunto que tiene todo menos esos dígitos y cosas, luego usa rangeOfCharactersFromSet y si obtienes algo más que NSNotFound, entonces tienes algo más que dígitos.

+0

Me gustaría señalar que, según la configuración regional, se pueden usar otros separadores además del guión para los números de teléfono. Por ejemplo aquí en alemania usamos una barra y/o espacios. – JustSid

+0

¿Cómo invierto ese conjunto? – hzxu

+0

Utiliza el método NSCharacterSet invertedSet – rdelmar

5

Esto debería funcionar:

//This is the input string that is either an email or phone number 
NSString *input = @"18003234322"; 

//This is the string that is going to be compared to the input string 
NSString *testString = [NSString string]; 

NSScanner *scanner = [NSScanner scannerWithString:input]; 

//This is the character set containing all digits. It is used to filter the input string 
NSCharacterSet *skips = [NSCharacterSet characterSetWithCharactersInString:@"1234567890"]; 

//This goes through the input string and puts all the 
//characters that are digits into the new string 
[scanner scanCharactersFromSet:skips intoString:&testString]; 

//If the string containing all the numbers has the same length as the input... 
if([input length] == [testString length]) { 

    //...then the input contains only numbers and is a phone number, not an email 
} 
Cuestiones relacionadas