Есть ли способ сделать запись в поле Текст должен быть по электронной почте?(в xcode) - PullRequest
10 голосов
/ 19 августа 2011

Я хочу создать форму для входа пользователя, и для этого нужно использовать электронную почту, а не только имена пользователейМогу ли я сделать предупреждение, если это не электронная почта?Кстати, все это в xcode.

Ответы [ 4 ]

40 голосов
/ 19 августа 2011

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

- (BOOL)validateEmail:(NSString *)emailStr {
    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[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
    }
}
3 голосов
/ 17 апреля 2015

Чтобы этот пост обновлялся с помощью современного кода, я подумал, что было бы неплохо опубликовать быстрый ответ, основанный на оригинальном объективном ответе Акашивского

// MARK: Validate
func isValidEmail(email2Test:String) -> Bool {
    let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
    let range = email2Test.rangeOfString(emailRegEx, options:.RegularExpressionSearch)
    let result = range != nil ? true : false
    return result
}    
2 голосов
/ 19 августа 2011

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

// 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 с сообщением об ошибке, так как оно показалось пользователю менее раздражающим. В приведенном выше коде я проверил формат адреса электронной почты, длину пароля и соответствие паролей (введенных дважды для проверки). Если все эти тесты не были пройдены, приложение не выполнило действие. Конечно, вы можете выбрать, какое поле вы хотите проверить ... просто подумал, что поделюсь своим примером.

0 голосов
/ 10 июня 2014

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

строка 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...