Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Validating the email address in UITextField

I am trying to put validation in text field containing email address.
What is to be added in string "emailRegEx" to limit the user from inserting three dots in email address or what I have to write in method for same.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string. 

Here is my code:

- (BOOL)EmailValidationL:(NSString *)email
{
    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 *regExPredicate =
    [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx];
    a= [regExPredicate evaluateWithObject:email];
    return a;
}
like image 417
Ketan Shinde Avatar asked Feb 16 '12 04:02

Ketan Shinde


2 Answers

you can do it by using the extension of String

extension String {
  var isEmail: Bool {
    let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
    let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
    return emailTest.evaluate(with: self)
  }
}

now you can use it as

if emailtext.isEmail {  
  print("email is valid")    
} else {
  print("email is not valid") 
}
like image 71
Ram Avatar answered Sep 22 '22 17:09

Ram


iOS already has built-in data detectors for a number of different data types. Although email isn't one of those types, an email address falls under the subtype of a link. Knowing that, it's easy to check for an email address:

NSError *error = nil;
NSDataDetector *detector = 
   [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:&error];

NSString *string = @"[email protected]";
[detector enumerateMatchesInString:string
                           options:kNilOptions
                             range:NSMakeRange(0, [string length])
                        usingBlock:^(NSTextCheckingResult *result, 
                                     NSMatchingFlags flags, BOOL *stop) 
{
  if([result.URL.absoluteString rangeOfString:@"mailto:"].location != NSNotFound)
  {
    NSLog(@"Match: %@", result);
  }
}];

Matt Thompson's NSHipster blog has an excellent article on NSDataDetector and its useage.

like image 37
memmons Avatar answered Sep 22 '22 17:09

memmons