iOS 中的电子邮件验证

问题描述 投票:0回答:8

iPhone 编程中的电子邮件验证检查可以使用 RegexKitLite 库 (iOS2.0)、

NSPredicate
(iOS 3.0 及以上)和
NSRegularExpression
(iOS 4.0) 来完成。但任何人都可以说出其中一种相对于另一种的优势是什么,以及哪一种是上述三种选择中最好的验证选项。

ios validation email nspredicate nsregularexpression
8个回答
11
投票

我一直在使用 NSPredicate...并且它工作正常

NSString *emailid = emailField.text;
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest =[NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
BOOL myStringMatchesRegEx=[emailTest evaluateWithObject:emailid];

8
投票

我的答案是来自此链接中提供的优秀解决方案的重构答案..

///Returns YES (true) if EMail is valid
+(BOOL) IsValidEmail:(NSString *)emailString Strict:(BOOL)strictFilter
{
    NSString *stricterFilterString = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    NSString *laxString = @".+@.+\\.[A-Za-z]{2}[A-Za-z]*";

    NSString *emailRegex = strictFilter ? stricterFilterString : laxString;
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];

    return [emailTest evaluateWithObject:emailString];
}

3
投票
- (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];
}

On Button Click :

if (![self validateEmail:[txtEmail text]])
    {
        alertValidator.message = @"Please Enter Valid Email Address !";
        [alertValidator show];
        txtEmail.text = @"";
        [txtEmail becomeFirstResponder];
    }

2
投票

我认为最好的选择,毫无疑问,是 Mailgun 的免费电子邮件验证 API。我为它编写了一个简单的 Objective-C 包装器:

https://github.com/benzguo/BZGMailgunEmailValidation

BZGMailgunEmailValidator *validator = 
    [BZGMailgunEmailValidator validatorWithPublicKey:YOUR_PUBLIC_KEY];

[validator validateEmailAddress:self.emailFieldCell.textField.text
                        success:^(BOOL isValid, NSString *didYouMean) {
                        // Validation succeeded
                      } failure:^(NSError *error) {
                        // Validation failed
                      }];

如果出现连接错误,验证器将回退到基于正则表达式的验证。

如果您仍然想使用正则表达式验证电子邮件,请查看:

http://www.regular-expressions.info/email.html

https://wiki.mozilla.org/TLD_List


1
投票

我认为这很大程度上取决于应用程序支持的最低 iOS 版本,如果有内置类可以完成这项工作,请使用它。正如您所暗示的,您将使用其他一些第三方框架以一致的方式支持旧版本。

现在,我会使用

NSPredicate
NSRegularExpression
,两者都从 iOS 4 开始受支持,如果不是 iOS 5,这很可能是新 iOS 应用程序的最低支持版本。

有用帖子


0
投票

完成电子邮件验证。试试这个

- (BOOL)validateEmailWithString:(NSString*)checkString
{

    NSString *laxString = @".+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2}[A-Za-z]*";
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", laxString];
    return [emailTest evaluateWithObject:checkString];
}

0
投票

Swift 6.3(正则表达式本机支持)

let email = "[email protected]"
if email ~= /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/i {
    print("Valid email address.")
} else {
    print("Invalid email address.")
}

-2
投票

如何在 ios 中创建电子邮件 ID 和密码验证

快点,轻松简单地验证电子邮件 ID,检查代码后是否有用。

- (IBAction)actLogin:(id)sender

{

    if([self validateEmailWithString:userNameText.text]==YES)
    {
         NSLog(@"valid email");
         if (passWordText.text.length>6)
         {
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            [defaults setObject:userNameText.text forKey:@"username"];
            [defaults setObject:passWordText.text forKey:@"password"];
            [defaults setObject:@"YES" forKey:@"islogin"];
            [defaults synchronize];
            NSLog(@"Login is Successfully !!");
         }
    }
    else
    {
        NSLog(@"invalid email and password");
    }
}

所以,我希望对你有帮助。 谢谢...

© www.soinside.com 2019 - 2024. All rights reserved.