0

This is my code.

- (BOOL)validateEmail:(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];
}

This is the function which i use to validate the email i enter in the textfield. i dont know if what i am doing is correct or wrong. should i be checking it in any other function instead of - (BOOL)textFieldShouldEndEditing if yes please tell me what function i have to use. if my regex or my validation is wrong help me out to get the correct one.

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
    BOOL eb;
    if (textField.tag == 44) {
        eb =[self validateEmail:textField.description];
        NSLog(@" %s", eb ? "true" : "false");
        if(!eb)
        {
            UIAlertView *alertsuccess = [[UIAlertView alloc] initWithTitle:@"Sorry" message:@"Please enter correct email id"
                                                                  delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

            [alertsuccess show];
            [alertsuccess release]; 
        }
    }
    return YES;
}  
Manju Basha
  • 665
  • 1
  • 9
  • 29

4 Answers4

0

Try this:

+(BOOL)emailValidate:(NSString *)email
{
    //Based on the string below
    //NSString *strEmailMatchstring=@"\\b([a-zA-Z0-9%_.+\\-]+)@([a-zA-Z0-9.\\-]+?\\.[a-zA-Z]{2,6})\\b";

    //Quick return if @ Or . not in the string
    if([email rangeOfString:@"@"].location==NSNotFound || [email rangeOfString:@"."].location==NSNotFound)
        //NSLog(@"%@",[email rangeOfString:@"@"]);
        //          NSLog(@"%@",[email rangeOfString:@"."]);
        return YES;

    //Break email address into its components
    NSString *accountName=[email substringToIndex: [email rangeOfString:@"@"].location];
    DLog(@"%@",accountName);
    email=[email substringFromIndex:[email rangeOfString:@"@"].location+1];
    DLog(@"%@",email);
    //'.' not present in substring
    if([email rangeOfString:@"."].location==NSNotFound)
        return YES;
    NSString *domainName=[email substringToIndex:[email rangeOfString:@"."].location];
    NSLog(@"%@",domainName);

    NSString *subDomain=[email substringFromIndex:[email rangeOfString:@"."].location+1];
    NSLog(@"%@",subDomain);

    //username, domainname and subdomain name should not contain the following charters below
    //filter for user name
    NSString *unWantedInUName = @" ~!@#$^&*()={}[]|;':\"<>,?/`";
    //filter for domain
    NSString *unWantedInDomain = @" ~!@#$%^&*()={}[]|;':\"<>,+?/`";
    //filter for subdomain
    NSString *unWantedInSub = @" `~!@#$%^&*()={}[]:\";'<>,?/1234567890";

    //subdomain should not be less that 2 and not greater 6
    if(!(subDomain.length>=2 && subDomain.length<=6)) 
        return YES;

    if([accountName isEqualToString:@""] 
       || [accountName rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:unWantedInUName]].location!=NSNotFound
       || [domainName isEqualToString:@""] 
       || [domainName rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:unWantedInDomain]].location!=NSNotFound 
       || [subDomain isEqualToString:@""] 
       || [subDomain rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:unWantedInSub]].location!=NSNotFound)
        return YES;

    return NO;
}

It returns NO if email is valid and returns Yes if email is invalid.

viral
  • 4,168
  • 5
  • 43
  • 68
Satish Azad
  • 2,302
  • 1
  • 16
  • 35
0

Change :

eb =[self validateEmail:textField.description];

to :

eb =[self validateEmail:textField.text];

Also, you can use the below mentioned code :

NSString *emailString = txt_EmailId.text;// storing the entered email in a string. 
// Regular expression to checl the email format. 
NSString *emailReg = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 

NSPredicate *emailTest=[NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailReg]; 

if(([emailTest evaluateWithObject:emailString]!=YES)||[emailString isEqualToString:@""]) 
{
      alert = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"Enter Email in abc@example.com format" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 

      [alert show]; 
      [alert release];
      txt_EmailId.text = @"";
       return;      
}
Rushi
  • 4,553
  • 4
  • 33
  • 46
0

try below code....

    if([self validation])
{
   //do your stuff

}
else
{
  //display error...
}



    -(BOOL)validation
   {
    NSString *emailString = mailLbl.text; //your email text....
    NSString *emailReg = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",emailReg]; 

     if (([emailTest evaluateWithObject:emailString] != YES) || [emailString isEqualToString:@""])
{
    return NO;
}
    else 
    {
       return YES;
    }

 }

let me know it is working or not!!!!!!

Happy Coding!!!!

NiravPatel
  • 3,260
  • 2
  • 21
  • 31
0

Try this code:

// *** Email ID Validation *** //

    NSString* emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 

    NSPredicate* emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 

    NSString *subjectString =emailtfd.text;

if ([emailTest evaluateWithObject:subjectString] != YES)
    {

        // *** Declare and Initialize the AlertView *** //

        UIAlertView *signupalert = [[UIAlertView alloc] initWithTitle:@"Enter Valid Email ID" message:@"abc@example.com format" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];

        [signupalert show];

        [signupalert release];

    }
San
  • 247
  • 2
  • 12