Есть ли способ сделать запись в текстовом поле электронной почтой? (в xcode)

Я хочу создать форму для входа в систему и использовать электронные письма не только для имен пользователей. Есть ли способ, чтобы я мог вызвать предупреждение, если это не письмо? btw Все это в xcode.

Ответ 1

Существует способ NSPredicate и регулярное выражение:

- (BOOL)validateEmail:(NSString *)emailStr {
    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 [emailTest evaluateWithObject:emailStr];
}

Затем вы можете отобразить предупреждение, если адрес электронной почты неверен:

- (void)checkEmailAndDisplayAlert {
    if(![self validateEmail:[aTextField text]]) {
        // user entered invalid email address
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Enter a valid email address." delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
        [alert show];
        [alert release];
    } else {
        // user entered valid email address
    }
}

Ответ 2

Чтобы обновить этот пост с помощью современного кода, я подумал, что было бы неплохо опубликовать быстрый ответ на основе akashivskyy's objective-c answer

// MARK: Validate
func isValidEmail(email2Test:String) -> Bool {
    let emailRegEx = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
    let range = email2Test.rangeOfString(emailRegEx, options:.RegularExpressionSearch)
    let result = range != nil ? true : false
    return result
}    

Ответ 3

Я сделал что-то подобное в своем приложении, где я подтвердил, что поле адреса электронной почты имеет две части, разделенные символом "@", и по крайней мере две части, разделенные символом ".". символ. Это не проверяет, что это действительный адрес электронной почты, но, по крайней мере, убедитесь, что он находится в правильном формате. Пример кода:

// to validate email address, just checks for @ and . separators
NSArray *validateAtSymbol = [[emailRegisterTextField text] componentsSeparatedByString:@"@"];
NSArray *validateDotSymbol = [[emailRegisterTextField text] componentsSeparatedByString:@"."];

// checks to make sure entries are good (email valid, username available, passwords enough chars, passwords match
if ([passwordRegisterTextField text].length >= 8 &&
    [passwordRegisterTextField text].length > 0 &&
    [[passwordRegisterTextField text] isEqual:[passwordVerifyRegisterTextField text]] &&
    ![currentUser.userExist boolValue] &&
    ![[emailRegisterTextField text] isEqualToString:@""] &&
    ([validateAtSymbol count] == 2) &&
    ([validateDotSymbol count] >= 2)) {

// get user input
NSString *inputEmail = [emailRegisterTextField text];
NSString *inputUsername = [userNameRegisterTextField text];
NSString *inputPassword = [passwordRegisterTextField text];
NSString *inputPasswordVerify = [passwordVerifyRegisterTextField text];

NSLog(@"inputEmail: %@",inputEmail);
NSLog(@"inputUsername: %@",inputUsername);
NSLog(@"inputPassword: %@",inputPassword);
NSLog(@"inputPasswordVerify: %@",inputPasswordVerify);

// attempt create
[currentUser createUser:inputEmail username:inputUsername password:inputPassword passwordVerify:inputPasswordVerify];
}
else {
    NSLog(@"error");
    [errorLabel setText:@"Invalid entry, please recheck"];
}

У вас может появиться предупреждение, если что-то не так, но я решил отобразить UILabel с сообщением об ошибке, так как он казался менее раздражающим для пользователя. В приведенном выше коде я проверил формат адреса электронной почты, длину пароля и совпадал с паролями (введенными дважды для проверки). Если все эти тесты не были выполнены, приложение не выполнило действие. Вы можете выбрать, какое поле вы хотите проверить, конечно... просто подумал, что я поделился бы своим примером.

Ответ 4

Этот способ хорошо работает для меня.

В строке 1.check есть только одна @

2.check, по крайней мере, имеет один. после @

2. вне любого пространства после @

-(BOOL)checkEmailString :(NSString*)email{
//DLog(@"checkEmailString = %@",email);
BOOL emailFlg = NO;
NSArray *atArr = [email componentsSeparatedByString:@"@"];

//check with one @
if ([atArr count] == 2) {
    NSArray *dotArr = [atArr[1] componentsSeparatedByString:@"."];

    //check with at least one .
    if ([dotArr count] >= 2) {
        emailFlg = YES;

        //all section can't be
        for (int i = 0; i<[dotArr count]; i++) {

            if ([dotArr[i] length] == 0 ||
                [dotArr[i] rangeOfString:@" "].location != NSNotFound) {
                emailFlg = NO;
            }
        }
    }
}

return emailFlg;
}