如何检查电子邮件的格式是不是有效?

Posted

技术标签:

【中文标题】如何检查电子邮件的格式是不是有效?【英文标题】:How to check whether the email is in valid format or not?如何检查电子邮件的格式是否有效? 【发布时间】:2014-04-02 07:33:23 【问题描述】:

我正在使用以下代码来检查我在 uitextfield 中输入的电子邮件的验证。但是当我输入 abcd@m.com.com 时它返回 true,它没有返回 false。

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:email];

谁能推荐我?

【问题讨论】:

关于使用正则表达式验证电子邮件地址的讨论很多,例如这里:***.com/questions/201323/…。 - 另外abcd@m.com.com 对我来说看起来“格式正确”(但我可能错了!)并且匹配正则表达式。为什么你期望得到虚假? abcd@m.com.com 可以是有效的电子邮件地址! 但我不需要 abcd@m.com.com。我需要像 abcd@m.com 【参考方案1】:

不要排除域 m.com.com,因为它可能是 com.com 的子域(这可能看起来很奇怪,但它是一个有效的 - 顺便说一句。真实的 - 域)。

如果您仍想排除所有子域(例如:在@ 之后只允许一个.),您将排除电子邮件地址,例如:

example@provider.co.uk example@groups.google.com example@press.apple.com example@support.stackexchange.com abcd@m.com.com

所以,您可能不想排除它们。

【讨论】:

【参考方案2】:

ios 代码的电子邮件验证。

- (BOOL)validateEmailWithString:(NSString*)email

    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:email];

文本字段委托

- (BOOL)textFieldShouldReturn:(UITextField *)textField

    [textField resignFirstResponder];

    if ([self validateEmailWithString:textField.text])
    
        Nslog(@"Valid");
    
    else
    
        Nslog(@"Not Valid");
    


【讨论】:

我使用的是相同的代码。我不希望电子邮件地址中有另一个 .com 并且应该返回为 false。我需要像 ancd@m.com 为什么要排除 .com.com? m.com.com 是 com.com 的(可能的)子域

以上是关于如何检查电子邮件的格式是不是有效?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查字符串是不是是android中的有效电子邮件? [复制]

如何检查在edittext中输入的有效电子邮件格式

如何检查电子邮件是不是有效? [复制]

如何检查 UITextField 的文本是不是是有效的电子邮件?

如何使用 PHP 检查电子邮件地址是不是真实或有效

如何让我当前的 PHP 联系表单检查输入的电子邮件地址是不是有效? [复制]