Я хочу создать форму для входа в систему и использовать электронные письма не только для имен пользователей. Есть ли способ, чтобы я мог вызвать предупреждение, если это не письмо? btw Все это в xcode.
Есть ли способ сделать запись в текстовом поле электронной почтой? (в 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;
}