在 iOS 的电子邮件中验证域中的字符数?

Posted

技术标签:

【中文标题】在 iOS 的电子邮件中验证域中的字符数?【英文标题】:validate number of characters in domain in email in iOS? 【发布时间】:2015-12-26 10:38:14 【问题描述】:

我正在使用the following code 来验证电子邮件地址。但是,这允许在域之后添加一个字符。例如,它允许myemail@gmail.c,它应该只允许包含至少两个字符的 TLD。

代码:

-(BOOL) IsValidEmail:(NSString *)checkString

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


请告诉我如何验证电子邮件?

【问题讨论】:

请参考此链接:***.com/questions/3139619/… 另见***.com/questions/201323/…,它的基本结论是“不要那样做”。正则表达式不是一个可行的解决方案,正如你的(坏掉的!)怪物正则表达式恰当地证明了。 可以调整您现有的正则表达式以仅接受包含至少 2 个字符的***域名(第 4 行):@"z0-9-]*[a-z0-9])?\\.)+[a-z0-9]2(?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5" 【参考方案1】:
-(BOOL) isValidEmail:(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];

***域最多可以达到63 字符,因此将正则表达式中的4 更改为your business decision。例如

@"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]2,63";

【讨论】:

以防万一有人在我查看此内容时遇到与我相同的问题:"\\." 存在是因为在尝试匹配正则表达式之前解释字符串时,"\\" 变为 "\" ,然后与下面的. 组合成为"\.",因为句点需要一个转义字符(否则它将只代表一个任何值的字符)。 完全无视.ninjaonlineglobal等TLD域名 @nhahtdh ***域可以上升到 63 字符,并且 OP 可以根据需要将最后一个数字 4 更改为 663

以上是关于在 iOS 的电子邮件中验证域中的字符数?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 中的电子邮件验证

电子邮件地址的最大字符数限制 [重复]

无法向我自己域中的地址发送电子邮件

注册页面的用户验证电子邮件

针对无效字符验证电子邮件地址

外来字符的电子邮件验证