【问题标题】:How to validate email address如何验证电子邮件地址
【发布时间】:2014-12-10 08:19:21
【问题描述】:

我试试这个例子,但它有一些电子邮件类型没有检查。

- (BOOL) validateEmail: (NSString *) candidate {
    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])+)\\])"; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES[c] %@", emailRegex]; 

    return [emailTest evaluateWithObject:candidate];
}

此示例不检查类型为 email@domain.c-om,email@domain.c#omc ,email@11.160.58.260 , em#il@domain.com 的电子邮件地址。检查电子邮件地址避免这种类型的正确方法是什么?

【问题讨论】:

  • 首先列出您想要检查的电子邮件地址。然后写一个正则表达式。

标签: ios objective-c regex


【解决方案1】:

你从哪里得到的正则表达式?看起来你是从 http://www.regular-expressions.info/email.html 那里得到的,上面写着

你可以(但你不应该——继续阅读)用这个常规实现它 表达

然后它说

你不应该使用这个正则表达式的原因是它只检查 电子邮件地址的基本语法。 john@aol.com.nospam 将是 根据 RFC 5322 被视为有效的电子邮件地址。

然后那个页面建议使用

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

对于 Objective-C,您必须避开反斜杠,然后一切就绪。

【讨论】:

    【解决方案2】:

    类别添加方法isEmail

     -(BOOL)isEmail {
        BOOL stricterFilter = YES; 
        NSString *stricterFilterString = @"^[_A-Za-z0-9-+]+(\\.[_A-Za-z0-9-+]+)*@[A-Za-z0-9-]+(\\.  [A-Za-z0-9-]+)*(\\.[A-Za-z‌​]{2,4})$";
        NSString *laxString = @".+@([A-Za-z0-9]+\\.)+[A-Za-z]{2}[A-Za-z]*";
        NSString *emailRegex = stricterFilter ? stricterFilterString : laxString;
        NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
        return [emailTest evaluateWithObject:self];
    }
    

    调用这个方法

    if([text isEmail]){
    //validate email id
    }else{
    //not email id
    }
    

    Disscusion for Email Validation

    【讨论】:

      【解决方案3】:

      试试这个:

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

      【讨论】:

      【解决方案4】:

      试试这个代码来验证给定的字符串是否是电子邮件。

      - (BOOL)validEmail:(NSString *) emailString
      {
          if([emailString length]==0)
          {
              return NO;
          }
          NSString *regExPattern = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
          NSRegularExpression *regEx = [[NSRegularExpression alloc] initWithPattern:regExPattern options:NSRegularExpressionCaseInsensitive error:nil];
          NSUInteger regExMatches = [regEx numberOfMatchesInString:emailString options:0 range:NSMakeRange(0, [emailString length])];
      
          if (regExMatches == 0)
          {
              return NO;
          }
          else
          {
              return YES;
          }
      }
      

      【讨论】:

      【解决方案5】:

      +(BOOL)validEmailid:(NSString *)emailId{

       @try
      
        {
      
         BOOL stricterFilter = NO;
      
          NSString *stricterFilterString = @"[A-Z0-9a-z\\._%+-]+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}";
      
          NSString *laxString = @".+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2}[A-Za-z]*";
      
          NSString *emailRegex = stricterFilter ? stricterFilterString : laxString;
      
          NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
      
          if ([emailTest evaluateWithObject:emailId]){
              return YES;
          }
          else{
              [self showalertwithmessage:@"Invalid emailid"];
      
              return NO;
          }
      
      }
      @catch (NSException *exception)
      {
          NSLog(@"Error occurred in in Utils::stringIsValidEmail : %@",[exception description]);
      }
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-12
        • 1970-01-01
        • 2018-03-13
        • 2011-09-02
        • 2013-02-20
        • 2014-03-12
        • 1970-01-01
        相关资源
        最近更新 更多