【问题标题】:How can I check that email address has been entered perfeclty in UITextfiled [duplicate]如何检查电子邮件地址是否已在文本字段中完美输入[重复]
【发布时间】:2012-06-27 10:35:48
【问题描述】:

可能重复:
Email validation on textField in iPhone sdk

我有一个应用程序,我想在其中获取用户的电子邮件地址作为输入。我想检查用户是否正确输入了电子邮件地址;像 @ 应该在字段中的文本中。我该怎么做?

textField.text=@"ali@hotmail.com"

如果文本框有这个值,那么确定,否则它应该提醒电子邮件地址应该是正确的

【问题讨论】:

  • SO 不是个人搜索助手,您需要在提问前先 google。

标签: iphone xcode


【解决方案1】:

你可以使用正则表达式验证,比如这个函数

-(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

【讨论】:

  • 这对我有用,直到新的域扩展生效......现在如何检查电子邮件地址?!
【解决方案2】:

您可以使用以下方法:-

- (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

【讨论】:

    【解决方案3】:

    试试这个

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

    【讨论】:

      【解决方案4】:
      -(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; 
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-07-15
        • 2015-09-03
        • 2011-08-17
        • 2014-05-06
        • 1970-01-01
        • 2011-09-01
        • 2016-08-20
        • 2012-09-09
        • 2018-10-21
        相关资源
        最近更新 更多