Как проверить, является ли текст UITextField действительным адресом электронной почты? - PullRequest
7 голосов
/ 10 октября 2011

У меня есть контроллер представления с 3 UITextFields (имя пользователя, адрес электронной почты и пароль).

Мне нужен метод, который сначала проверяет, есть ли во всех полях текст, а затем проверяет, является ли текстовое поле электронной почты действительным, возможно, проверяя, есть ли в нем знак @. Кто-нибудь может помочь с этим?

Ответы [ 5 ]

6 голосов
/ 10 октября 2011

Следующий код используется для проверки правильности идентификатора электронной почты с помощью регулярных выражений.

(BOOL) validateEmail: (NSString *) candidate {
    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; //  return 0;
    return [emailTest evaluateWithObject:candidate];
}
5 голосов
/ 30 октября 2013

Я использовал решение Mimit, но изменил emailRegex, чтобы учесть более длинные имена, такие как музей.Таким образом, последние фигурные скобки теперь говорят {2, 6}, а не {2, 4}.И я проверил это с более длинным именем, и это работает.Спасибо Mimit за простое решение.

-(BOOL) validateEmail: (NSString *) candidate {
    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];    //  return 0;
   return [emailTest evaluateWithObject:candidate];
}
5 голосов
/ 10 октября 2011

Это проверит UITextField для правильной электронной почты.
Добавьте этот метод в textFields делегат , затем проверьте, следует ли добавлять символы, которые он собирается изменить, или нет.
Возврат YES или NO в зависимости от текущего текста текстовых полей по сравнению с действительным адресом электронной почты:

#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:@".!#$%&'*+-/=?^_`{|}~@"]] invertedSet];
    }
    return ([[string componentsSeparatedByCharactersInSet:unacceptedInput] count] <= 1);
}  

Чтобы проверить, является ли текстовое поле пустым или нет, просто используйте if (myTextField.text.length > 0) {} в любом месте вашего контроллера представления.

3 голосов
/ 10 октября 2011

попробуйте это: -

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

        NSString *emailRegEx = @"[A-Z0-9a-z._%+-]+@[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
        }
0 голосов
/ 10 октября 2011

Если вы ориентируетесь на iOS 4.0 или более позднюю версию, вы также можете рассмотреть NSRegularExpression и сделать более детальную проверку содержимого UITextField в соответствии с this , например.

...