电子邮件验证 iPhone SDK

4
假设我已经创建了 IBOutlet UITextField *emailValidate;,并且有一个空的方法。
-(IBAction)checkEmail:(id)sender {

// Add email validation code here.

}

将文件所有者文件与TextField相关联,那么在验证电子邮件地址的方法中需要插入什么代码呢?检查是否只包含一个“@”和一个“.”。


3
graham.lee@example.co.uk 中的三个“.”字符中,哪一个是允许的? - user23743
只有一个 . 吗?你是在暗示数百万个 firstName.lastName@provider.tld 不合法吗? - Matthias Bauch
6个回答

17

使用下面的函数...

+(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;
}

2
在我的情况下,我使用在这篇博客文章中找到的正则表达式来验证电子邮件地址:
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])+)\\])";

0

你可以通过在“@”上拆分字符串并检查是否有2个部分来确定是否恰好有一个“@”。

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

0
我之前用了Macarse分享的解决方案(大正则表达式)几个星期,并且获得了成功,但突然遇到了一个有问题的情况。例如,它无法通过“test1_iPhone@neywen.net”的测试。 因此,我选择回到了S P Varma提供的更简单的解决方案(小而简单的正则表达式)。

0

你可以从以下链接 link 获取一组代码。希望这对你有所帮助。


-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正则表达式。

3
我希望你能为此点赞catlan;-) https://dev59.com/7XRA5IYBdhLWcg3w2x2W#1149894 - Matthias Bauch
1
那个正则表达式不会起作用:它会剥离掉很多有效的电子邮件。 - ipartola

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接