如何检查 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,然后检查是否应添加即将更改的字符。 返回 YESNO,具体取决于文本字段当前文本与有效电子邮件地址的比较:

#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 &gt; 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 的文本是不是是有效的电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

iphone使用标签检查UITextField是不是存在

如何检查 UITextField 何时更改?

如何在Swift中切换UITextField安全文本条目(隐藏密码)?

如何检测 UITextField 上的点击?

检查输入到文本字段的值是不是是给定范围内的整数

如何使用左侧的占位符和右侧的编辑文本创建 UITextField?