如何检查 UITextField 的文本是不是是有效的电子邮件?
Posted
技术标签:
【中文标题】如何检查 UITextField 的文本是不是是有效的电子邮件?【英文标题】:How to check if UITextField's text is valid email?如何检查 UITextField 的文本是否是有效的电子邮件? 【发布时间】:2011-12-04 04:58:48 【问题描述】:我有一个带有 3 个 UITextFields(用户名、电子邮件和密码)的视图控制器。
我需要一种方法,首先检查所有字段中是否包含文本,然后检查电子邮件的文本字段是否为有效电子邮件,可能通过检查它是否有@
登录。有人可以帮忙吗?
【问题讨论】:
【参考方案1】:这将检查 UITextField 是否有正确的电子邮件。
将此方法添加到textFields delegate,然后检查是否应添加即将更改的字符。
返回 YES
或 NO
,具体取决于文本字段当前文本与有效电子邮件地址的比较:
#define ALPHA @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
#define NUMERIC @"1234567890"
#define ALPHA_NUMERIC ALPHA NUMERIC
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
NSCharacterSet *unacceptedInput = nil;
if ([[textField.text componentsSeparatedByString:@"@"] count] > 1)
unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:[ALPHA_NUMERIC stringByAppendingString:@".-"]] invertedSet];
else
unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:[ALPHA_NUMERIC stringByAppendingString:@".!#$%&'*+-/=?^_`|~@"]] invertedSet];
return ([[string componentsSeparatedByCharactersInSet:unacceptedInput] count] <= 1);
要检查文本字段是否为空,只需在视图控制器中的任意位置使用if (myTextField.text.length > 0)
。
【讨论】:
【参考方案2】:如果您的目标是 ios 4.0 或更高版本,您还可以考虑使用NSRegularExpression,并按照this 的方式对 UITextField 内容进行更细致的检查。
【讨论】:
【参考方案3】:试试这个:-
if(![emailTextField.text isEqualToString:@""] && ![userNameTextField.text isEqualToString:@""] && ![passwordTextField.text isEqualToString:@""])
NSString *emailRegEx = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]2,4";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx];
//Valid email address
if ([emailTest evaluateWithObject:emailTextField.text] == YES)
else
//not valid email address
else
//any of the text field is empty
【讨论】:
【参考方案4】:以下代码用于使用 Regex(正则表达式)检查电子邮件 ID 的验证。
(BOOL) validateEmail: (NSString *) candidate
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]2,4";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; // return 0;
return [emailTest evaluateWithObject:candidate];
【讨论】:
【参考方案5】:我使用了 Mimit 的解决方案,但修改了 emailRegex 以允许更长的名称,例如博物馆。所以最后一个大括号现在说的是 2, 6 而不是 2, 4。我用更长的名字测试了它,它可以工作。感谢 Mimit 提供的简单解决方案。
-(BOOL) validateEmail: (NSString *) candidate
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]2,6";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; // return 0;
return [emailTest evaluateWithObject:candidate];
【讨论】:
以上是关于如何检查 UITextField 的文本是不是是有效的电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章