假设我创建了IBOutlet UITextField *emailValidate;
空方法
-(IBAction)checkEmail:(id)sender {
// Add email validation code here.
}
并将文件所有者文件链接到TextField
,我必须在方法中插入哪些代码来验证电子邮件地址?检查只包含一个'@',只有一个'。'包括在内?
答案 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正则表达式。