2011-10-10 9 views
7

Ho un controller di visualizzazione con 3 UITextFields (nome utente, indirizzo email e password).Come verificare se il testo di UITextField è un indirizzo email valido?

Ho bisogno di un metodo che controlli per primo, se tutti i campi contengono del testo, quindi controlla se il campo di testo dell'email è un indirizzo email valido, forse controllando se ha un segno @. Qualcuno può aiutare con questo?

risposta

4

Verificherà un UITextField per un'e-mail corretta.
Aggiungere questo metodo allo textFields delegate quindi verificare se i caratteri che sta per cambiare devono essere aggiunti o meno.
ritorno YES o NO a seconda del testo attuale campi di testo rispetto ad un indirizzo email valido:

#define ALPHA     @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" 
#define NUMERIC     @"1234567890" 
#define ALPHA_NUMERIC   ALPHA NUMERIC 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSCharacterSet *unacceptedInput = nil; 
    if ([[textField.text componentsSeparatedByString:@"@"] count] > 1) { 
     unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:[ALPHA_NUMERIC stringByAppendingString:@".-"]] invertedSet]; 
    } else { 
     unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:[ALPHA_NUMERIC stringByAppendingString:@".!#$%&'*+-/=?^_`{|}[email protected]"]] invertedSet]; 
    } 
    return ([[string componentsSeparatedByCharactersInSet:unacceptedInput] count] <= 1); 
} 

Per verificare se un campo di testo è vuota o non basta usare if (myTextField.text.length > 0) {} ovunque nel vostro controller della vista.

+0

http://stackoverflow.com/a/3638271/644149 è buon modo –

0

Se si utilizza iOS 4.0 o versione successiva, è possibile considerare anche NSRegularExpression e fare un controllo più dettagliato dei contenuti di UITextField lungo le linee di this, ad esempio.

3

provare questo: -

if(![emailTextField.text isEqualToString:@""] && ![userNameTextField.text isEqualToString:@""] && ![passwordTextField.text isEqualToString:@""]) 
     { 

     NSString *emailRegEx = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
     NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx]; 
     //Valid email address 
     if ([emailTest evaluateWithObject:emailTextField.text] == YES) 
     { 
    } 
    else 
    { 
    //not valid email address 
    } 
} 


     else 
     { 
     //any of the text field is empty 
     } 
6

seguito il codice è uso per la verifica della convalida del id e-mail utilizzando il Regex (Expresion regolare).

(BOOL) validateEmail: (NSString *) candidate { 
    NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; // return 0; 
    return [emailTest evaluateWithObject:candidate]; 
} 
+0

con questa espressione regolare, i nuovi domini, come .museum non funzionerà – Martin

5

Ho usato la soluzione di Mimit ma ho modificato l'indirizzo emailRegex per consentire nomi più lunghi come musei. Quindi le ultime parentesi graffe ora dicono {2, 6} non {2, 4}. E l'ho provato con il nome più lungo e funziona. Grazie Mimit per la soluzione facile.

-(BOOL) validateEmail: (NSString *) candidate { 
    NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"; 
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; // return 0; 
    return [emailTest evaluateWithObject:candidate]; 
} 
Problemi correlati