iOS 中的电子邮件验证
Posted
技术标签:
【中文标题】iOS 中的电子邮件验证【英文标题】:Email Validation in iOS 【发布时间】: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()) 【参考方案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 方框架以一致的方式支持旧版本。
现在,我会使用 NSPredicate
或 NSRegularExpression
,从 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");
所以,我希望对你有所帮助。 谢谢...
【讨论】:
以上是关于iOS 中的电子邮件验证的主要内容,如果未能解决你的问题,请参考以下文章
谁能帮我验证 iOS 中的电子邮件,例如“0@0.bk”、“0@0.ak.bk.ck.dk.ek.fk.gk.hk.lk.mk.nk.ok” .pk”等,? [关闭]