2012-09-24 10 views
5

Muszę określić, czy tekst jest adresem e-mail, czy numerem telefonu komórkowego, na adres e-mail Mogę użyć wyrażenia regularnego, dla numeru telefonu komórkowego mogę sprawdzić, czy ciąg ma tylko cyfry (prawe?)iOS: jak sprawdzić, czy ciąg ma tylko cyfry?

oraz sekwencja wygląda następująco:

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

, ale jak sprawdzić, czy ciąg zawiera tylko cyfry w systemie iOS?

Dzięki

+1

Dla drugiego bitu. możliwy duplikat [Jak sprawdzić czy NSString jest numeryczny czy nie] (http://stackoverflow.com/questions/2020360/how-to-check-if-nsstring-is-numeric-or-not), który sam jest dupe http://stackoverflow.com/questions/1320295/iphone-how-to-check-that-a-string-is-numeric-only - proszę spojrzeć następnym razem przed pytaniem, tak naprawdę nie chcemy miliona kopii każde pytanie :-) – paxdiablo

+0

Po pierwsze, ustalono, że regex zdolny do poprawnego wysyłania e-maili ma długość około 27 miliardów znaków :-) Najlepszym sposobem na sprawdzenie wiadomości jest wysłanie jej za pomocą linku, który jest wymagane do wyboru. Nie każdy legalny adres e-mail jest ważny. – paxdiablo

+0

Co się stanie, jeśli numer telefonu zawiera myślniki? Lub nawias? – borrrden

Odpowiedz

10

utworzyć NSCharacterSet który zawiera cyfry i prawdopodobnie może myślnik i nawiasy (w zależności od formatu, co widzisz dla numerów telefonów). Następnie odwracasz ten zestaw, więc masz zestaw, który ma wszystko oprócz tych cyfr i rzeczy, a następnie użyj rangeOfCharactersFromSet i jeśli otrzymasz coś innego niż NSNotFound, to masz coś innego niż cyfry.

+0

Chciałbym podkreślić, że w zależności od ustawień regionalnych do numerów telefonów można używać innych separatorów niż myślników. Na przykład tutaj w Niemczech używamy ukośnika i/lub spacji. – JustSid

+0

Jak mogę odwrócić ten zestaw? – hzxu

+0

Używasz metody NSCharacterSet invertedSet – rdelmar

5

To powinno działać:

//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 
} 
Powiązane problemy