目标C电子邮件格式验证的正确方法
喜的朋友,我需要正确的邮箱格式验证,并在我的代码目标C电子邮件格式验证的正确方法
+ (BOOL)validateEmailID:(NSString *)emailString {
if ([emailString length] == 0) {
return NO;
}
NSString *regExPattern = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
NSRegularExpression *regEx = [[NSRegularExpression alloc] initWithPattern:regExPattern options:NSRegularExpressionCaseInsensitive error:nil];
NSUInteger regExMatches = [regEx numberOfMatchesInString:emailString options:0 range:NSMakeRange(0, [emailString length])];
return regExMatches != 0;
}
其工作的罚款。但我输入电子邮件ID像 - [email protected] & [email protected] & [email protected]其工作良好。 但我的问题是第一个值应该是字符然后数字或全字符电子邮件ID验证: 我想输入电子邮件像[email protected]或[email protected]或[email protected]这种格式。不仅是完整的数字。 混合的电子邮件ID,但首先输入的值应该是字符。
请有人可以帮忙。下面
是代码
+(BOOL)validateEmailWithstring:(NSString*)mailString
{
NSString *validString = @"[email protected]([A-Za-z0-9-]+\\.)+[A-Za-z]{2}[A-Za-z]*";
NSPredicate *emailTest=[NSPredicate predicateWithFormat:@"SELF MATCHES %@",validString];
return [emailTest evaluateWithObject:mailString];
}
感谢@阿伦,它的工作,但不完全是我想要的。如果你输入[email protected],它的答案是错误的。这正是bro.first输入的值应该是[email protected]这样的字符。不是这个[email protected]或[email protected]。 –
所以,你想这个工作 - [email protected]。用户应该输入的起始最小字符应该是什么? – Arun
Replace - valid string - 'validString =“[A-Za-z] {1} [A-Za-z0-9 - ]。+ @([A-Za-z0-9 - ] + \\。)+ [A-Za-z] {2} [A-Za-z] *“'将{1}更改为想要作为字符串输入的最小字符数。 – Arun
Accordint到this站点:
我根据苹果recomendations添加前缀的NSString类别的方法。
@interface NSString(RegularExpressions)
- (BOOL)rep_isValidEmail;
@end
@implementation
- (BOOL)rep_isValidEmail
{
NSString *expression = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,64}";
NSPredicate *test=[NSPredicate predicateWithFormat:@"SELF MATCHES %@",expression];
return [test evaluateWithObject:self];
}
@end
有关全球:
+(BOOL)validateEmail:(NSString *)mailStr {
NSString *validStr = @"/^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/";
NSPredicate *emailPre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",validStr];
return [emailPre evaluateWithObject:mailStr];
}
试试这个
func validateEmail(candidate: String) -> Bool {
let emailRegex = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluateWithObject(candidate)
}
试试这个。
-(BOOL)isValidEmail
{
BOOL stricterFilter = YES;
NSString *stricterFilterString = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{1,4}";
NSString *laxString = @"[email protected]+\\.[A-Za-z]{2}[A-Za-z]*";
NSString *emailRegex = stricterFilter ? stricterFilterString : laxString;
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:self];
}
的表达,您正在使用不符合RFC 5322,这样你就阻止许多领域一样,每家公司在英国([email protected])。
+ (BOOL) validateEmail: (NSString *) candidate;
{
// The Official Standard: RFC 5322
// http://www.regular-expressions.info/email.html
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 *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx];
return [predicate evaluateWithObject:candidate];
}
好文章http://www.regular-expressions.info/email.html – souvickcse
一般情况下,电子邮件地址不能完全通过正则表达式验证。我建议使用通用的'^ \\ S + @ \ S + $'。其他一切都不需要。验证应该保护用户输入不好的数据(例如全名到电子邮件)。它不一定是完美的,电子邮件有太多边缘情况。 – Sulthan