【问题标题】:Ensure User has entered email address string in correct format?确保用户输入了正确格式的电子邮件地址字符串?
【发布时间】:2012-06-21 02:52:44
【问题描述】:

我在联系人屏幕中有一个文本字段,用户需要输入电子邮件地址才能向我发送消息。 确保用户输入有效电子邮件地址的最佳方法是:

a@b.com / net / org / co.il
abc@gmail.com
abc@yahoo.com

等等。

谢谢

【问题讨论】:

  • 检查电子邮件地址是否有效的唯一方法是向其发送电子邮件,并确认电子邮件已收到。如果您希望用户向您发送消息,您可以使用邮件撰写视图控制器 - 这将来自他们在设备上配置的电子邮件帐户之一。
  • 是的,我知道,但我通过 HTTPRequest 而不是 MFMailComposer 执行发送消息方法。

标签: iphone objective-c regex email nsregularexpression


【解决方案1】:

尝试以下方法:

- (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 0;
    return [emailTest evaluateWithObject:candidate];
}


-(IBAction)btnTapped:(id)sender{

    if([self validateEmail:[txtEmail text]] ==1)
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Message" message:@"You Enter Correct Email id." delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
        [alert show];
        [alert release];

    }
    else{
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Message" message:@"You Enter Incoorect Email id." delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
        [alert show];
        [alert release];
    }
}

【讨论】:

  • 工作得很好。非常感谢:)
【解决方案2】:

使用这个 textField 委托函数,因为它将在每个输入的文本上调用:

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
 {
      NSString *strEnteredText = textField.text;
     if(strEnteredText.length>0) 
     {
       if([self validateEmail:strEnteredText])
       {
          //Valid email 
          //Use UILabel to give message
         // BOOL email = true to know email is valid when submit button tapped
       }
       else
       {
          //Not Valid email
          //Use UILabel to give message
          // BOOl emaiL = false to know email is valid when submit button tapped
        }
     }
 }

添加这个方法.h文件

 - (BOOL) validateEmail: (NSString *) enteredText 
 {
   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:enteredText];
 }

【讨论】:

  • 您的最后一个选项是一个糟糕的主意,特别是因为 tld 的数量即将爆炸。
  • 谢谢,但我更喜欢第一个答案。
【解决方案3】:

斯威夫特

extension String {
    func isValidEmail() -> Bool {
        let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,10}"
        let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
        let result = emailTest.evaluateWithObject(self)
        return result
    }
}

"jim@off.com".isValidEmail() //true
"jim.com".isValidEmail() // false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-14
    • 2014-04-06
    • 1970-01-01
    • 2020-04-22
    • 2015-02-16
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多