在 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";
【讨论】:
以防万一有人在我查看此内容时遇到与我相同的问题:"\\."
存在是因为在尝试匹配正则表达式之前解释字符串时,"\\"
变为 "\"
,然后与下面的.
组合成为"\."
,因为句点需要一个转义字符(否则它将只代表一个任何值的字符)。
完全无视.ninja
、online
、global
等TLD域名
@nhahtdh ***域可以上升到 63
字符,并且 OP 可以根据需要将最后一个数字 4
更改为 6
或 63
。以上是关于在 iOS 的电子邮件中验证域中的字符数?的主要内容,如果未能解决你的问题,请参考以下文章