【问题标题】:Email Validation in iOSiOS 中的电子邮件验证
【发布时间】:2012-01-20 23:49:37
【问题描述】:

可以使用 RegexKitLite 库 (iOS2.0)、NSPredicate(iOS 3.0 及更高版本)和NSRegularExpression(iOS 4.0)来完成 iPhone 编程中的电子邮件验证检查。但是任何人都可以说明一个比另一个有什么优势,哪个是上述三个中最好的验证选项。

【问题讨论】:

  • 仅供参考,这是一个在 Android 上非常简单的示例,它内置于其中 .. if (!android.util.Patterns.EMAIL_ADDRESS.matcher(someString).matches())

标签: ios validation email nspredicate nsregularexpression


【解决方案1】:

我一直在使用 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];

【讨论】:

  • 如何限制用户在文本字段中仅输入@gmail.com 的电子邮件ID。
【解决方案2】:

我的答案是重构自the excellent solution provided in this link..

///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];
        }
    

    【讨论】:

      【解决方案4】:

      我认为最好的选择是Mailgun's free email validation 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

      【讨论】:

        【解决方案5】:

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

        现在,我会使用 NSPredicateNSRegularExpression,从 iOS 4 开始都支持,如果不是 iOS 5,这很可能是新 iOS 应用程序支持的最低版本。

        有用的post

        【讨论】:

        • 感谢您仅针对该问题提供解决方案。现在我正在开发 iOS 5.0 并且 NSPredicate 工作正常。
        【解决方案6】:

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

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

        【讨论】:

          【解决方案7】:

          如何在 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");
              }
          }
          

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-07-22
            • 2013-02-20
            • 2016-05-19
            • 1970-01-01
            • 1970-01-01
            • 2013-03-25
            • 1970-01-01
            相关资源
            最近更新 更多