如何检查UITextField的文本是否是有效的电子邮件?

时间:2011-10-10 02:06:12

标签: iphone objective-c cocoa-touch nsstring uitextfield

我有一个带有3个UITextFields(用户名,电子邮件和密码)的视图控制器。

我需要一个首先检查的方法,如果所有字段都包含文本,那么检查电子邮件的文本字段是否是有效的电子邮件,可以通过检查它是否有@标志。任何人都可以帮忙吗?

5 个答案:

答案 0 :(得分:6)

以下代码用于使用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];
}

答案 1 :(得分:5)

这将检查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 > 0) {}

答案 2 :(得分: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];
}

答案 3 :(得分: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 :(得分:0)

如果您的目标是iOS 4.0或更高版本,您可能还会考虑NSRegularExpression,并在this的行中对UITextField内容进行更细微的检查。