我想使用NSRegularExpression类来验证是否NSString是电子邮件地址.
像这样的伪代码:
- (BOOL)validateMail : (NSString *)email
{
NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:@"" options:NSRegularExpressionCaseInsensitive error:NULL];
if(emailValidated)
{
return YES;
}else{
return NO;
}
}
Run Code Online (Sandbox Code Playgroud)
但我不知道我是如何验证NSString的,如果它看起来像这个"email@stackoverflow.com"
也许有人可以帮助我.
问候s4lfish
sha*_*oga 31
您可以使用:
@"^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$"; // Edited: added ^ and $
Run Code Online (Sandbox Code Playgroud)
你可以在这里测试一下:
http://gskinner.com/RegExr/?2rhq7
并保存此链接,它将在未来帮助您使用Regex:
编辑
你可以这样做:
NSString *string = @"shlaflaf@me.com";
NSString *expression = @"^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$"; // Edited: added ^ and $
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression options:NSRegularExpressionCaseInsensitive error:&error];
NSTextCheckingResult *match = [regex firstMatchInString:string options:0 range:NSMakeRange(0, [string length])];
if (match){
NSLog(@"yes");
}else{
NSLog(@"no");
}
Run Code Online (Sandbox Code Playgroud)
小智 8
这是一个较老的问题,但它足够通用,永远不会过时.
99.9%的电子邮件地址正则表达式是错误的,甚至更少处理国际域(IDN)正确.
尝试制作全面的电子邮件正则表达式并不能很好地利用开发时间或用户CPU周期.
这更简单:
比赛 [^@]+@([^@]+)
根据匹配的部分提取域.
如果它与禁止的域匹配则失败.从JSON端点本地缓存禁止域列表,这样您就不必等待重新批准,并且可以即时更新它.(请务必记录网络统计信息以进行转换分析.)
检查域是否有DNS记录.检查A和AAAA,以及MX,因为并非所有域都实现MX.(Lame但是真的.)
只是尝试发送电子邮件.如果用户认为某个应用具有价值,则会再次尝试.:))
| 归档时间: |
|
| 查看次数: |
14223 次 |
| 最近记录: |