电子邮件验证iPhone SDK

时间:2011-02-17 15:41:52

标签: iphone validation email

假设我创建了IBOutlet UITextField *emailValidate;

空方法

-(IBAction)checkEmail:(id)sender {

// Add email validation code here.

}

并将文件所有者文件链接到TextField,我必须在方法中插入哪些代码来验证电子邮件地址?检查只包含一个'@',只有一个'。'包括在内?

6 个答案:

答案 0 :(得分:18)

使用以下功能...

+(BOOL) validateEmail: (NSString *) email 
{
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
BOOL isValid = [emailTest evaluateWithObject:email];
return isValid;
}

答案 1 :(得分:2)

在我的情况下,我使用在this blogpost找到的正则表达式:

NSString *emailRegEx =
    @"(?:[a-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[a-z0-9!#$%\\&'*+/=?\\^_`{|}"
    @"~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\"
    @"x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-"
    @"z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5"
    @"]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-"
    @"9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21"
    @"-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])";

答案 2 :(得分:0)

您可以通过在'@'上分割字符串并检查2件来确定是否只有一个“@”。

int numberOfAtPieces = [[emailValidate.text  componentsSeparatedByString:@"@"] count];
if ( numberOfAtPicess != 2 ) {  // show error alert }
else {  // let it through }

答案 3 :(得分:0)

您可以从以下link获取一组代码。希望这可能有用

答案 4 :(得分:0)

我已经使用Macarse(大正则表达式)共享的解决方案成功了几周,但我突然遇到了一个有问题的案例。例如,它没有以“test1_iPhone@neywen.net”通过测试。 所以我选择回到S P Varma提供的更简单的解决方案(小而简单的正则表达式)。

答案 5 :(得分:-1)

您可以在UITextField的文本上调用以下方法:

- (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 [emailTest evaluateWithObject:candidate];
}

请根据您的需要调整emailRegex正则表达式。