【发布时间】:2012-06-27 10:35:48
【问题描述】:
我有一个应用程序,我想在其中获取用户的电子邮件地址作为输入。我想检查用户是否正确输入了电子邮件地址;像 @ 应该在字段中的文本中。我该怎么做?
textField.text=@"ali@hotmail.com"
如果文本框有这个值,那么确定,否则它应该提醒电子邮件地址应该是正确的
【问题讨论】:
-
SO 不是个人搜索助手,您需要在提问前先 google。
我有一个应用程序,我想在其中获取用户的电子邮件地址作为输入。我想检查用户是否正确输入了电子邮件地址;像 @ 应该在字段中的文本中。我该怎么做?
textField.text=@"ali@hotmail.com"
如果文本框有这个值,那么确定,否则它应该提醒电子邮件地址应该是正确的
【问题讨论】:
你可以使用正则表达式验证,比如这个函数
-(BOOL) isValidEmail:(NSString *)checkString
{
checkString = [checkString lowercaseString];
BOOL stricterFilter = YES;
NSString *stricterFilterString = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSString *laxString = @".+@.+\\.[A-Za-z]{2}[A-Za-z]*";
NSString *emailRegex = stricterFilter ? stricterFilterString : laxString;
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:checkString];
}
这样使用
if([self isValidEmail:textField.text])
//Valid
else
//Not valid, do the alert
【讨论】:
您可以使用以下方法:-
- (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];
}
如果输入格式正确,该方法将返回TRUE,否则返回FALSE
【讨论】:
试试这个
NSString *emailRegEx = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx];
if ([emailTest evaluateWithObject:m_CtrlTxtFld_Email.text] != YES && [m_CtrlTxtFld_Email.text length]!=0)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Please enter valid email address" message:@"" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
return;
}
【讨论】:
-(BOOL)isValidEmaill:(NSString*)in_EmailId
{
if( (0 != [in_EmailId rangeOfString:@"@"].length) && (0 != [in_EmailId rangeOfString:@"."].length) )
{
NSMutableCharacterSet *invalidCharSet = [[[[NSCharacterSet alphanumericCharacterSet] invertedSet]mutableCopy]autorelease];
[invalidCharSet removeCharactersInString:@"_-"];
NSRange range1 = [in_EmailId rangeOfString:@"@" options:NSCaseInsensitiveSearch];
// If username part contains any character other than "." "_" "-"
NSString *usernamePart = [in_EmailId substringToIndex:range1.location];
NSArray *stringsArray1 = [usernamePart componentsSeparatedByString:@"."];
for (NSString *string in stringsArray1) {
NSRange rangeOfInavlidChars=[string rangeOfCharacterFromSet: invalidCharSet];
if(rangeOfInavlidChars.length !=0 || [string isEqualToString:@""])
return NO;
}
NSString *domainPart = [in_EmailId substringFromIndex:range1.location+1];
NSArray *stringsArray2 = [domainPart componentsSeparatedByString:@"."];
for (NSString *string in stringsArray2) {
NSRange rangeOfInavlidChars=[string rangeOfCharacterFromSet:invalidCharSet];
if(rangeOfInavlidChars.length !=0 || [string isEqualToString:@""])
return NO;
}
return YES;
}
else // no '@' or '.' present
{
//[mEmailAddrTextField becomeFirstResponder];
return NO;
}
}
【讨论】: