0

I have made an iphone application in which I have used email id validation. The code which I have used is as below:

NSString *valid = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}"; 
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", valid];

if ([emailTest evaluateWithObject:Id.text] == NO) 
    {
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Validation" message:@"Email Id is not Valid" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
        [alert release];

    }
    if ([emailTest evaluateWithObject:Id.text] == YES) 
    {
    NSString *b = Id.text; 
    NSLog(@"value of the Id is : %@",b);

        if([b length] != 0)
        {
            MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
            picker.mailComposeDelegate = self;

            //[picker setSubject:@"Your iPhone fan"];//@"Hello iPhone!"
            [picker setToRecipients:[NSArray arrayWithObject:b]];

            NSString *emailBody =@""; //@"";//@"Nice  to See you!";
            [picker setMessageBody:emailBody isHTML:NO];

            [self presentModalViewController:picker animated:YES];
            [picker release];

        }
    }

But if I put 1@gmail.com in textfield then it still shows valid id but in real it is invalid email id.

OMG Ponies
  • 325,700
  • 82
  • 523
  • 502
Minkle Garg
  • 723
  • 3
  • 9
  • 35
  • 1
    Well, the e-mail regex you use is 1) widely known, but 2) pretty much useless (e.g. `some[one]some{where}@xyzyy.travel` is valid but rejected). See this for a heated discussion on this topic: http://stackoverflow.com/questions/201323/what-is-the-best-regular-expression-for-validating-email-addresses – Piskvor left the building Jun 01 '11 at 13:46

4 Answers4

2

Try this

- (BOOL) validateEmail: (NSString *) candidate {
    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:candidate];
}
Chetan Bhalara
  • 10,326
  • 6
  • 32
  • 51
1
-(IBAction)idValidator:(id)sender {
NSString *str=idField.text;

NSString *regex =@"\\b([a-zA-Z0-9%_.+\\-]+)\\b"; 

NSPredicate * regextest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

BOOL x= [regextest evaluateWithObject:str];

if (x==FALSE) 
{
    //do something

}
else {
    //do something
}   
}   
rptwsthi
  • 10,094
  • 10
  • 68
  • 109
0

U JUST PASS THE STRING AND RETURN VALID EMAIL OR NOT

- (BOOL)validateEmailWithString:(NSString*)email
{
    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,5}"; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 
    return [emailTest evaluateWithObject:email];
}
Ashok Domadiya
  • 1,124
  • 13
  • 31
0
//For validating email id use following code ....

-(BOOL)validateEmail:(NSString*)email
{

    if( (0 != [email rangeOfString:@"@"].length) &&  (0 != [email rangeOfString:@"."].length) )
    {
        NSMutableCharacterSet *invalidCharSet = [[[[NSCharacterSet alphanumericCharacterSet] invertedSet]mutableCopy]autorelease];

        [invalidCharSet removeCharactersInString:@"_-"];

        NSRange range1 = [email rangeOfString:@"@" options:NSCaseInsensitiveSearch];

        // If username part contains any character other than "."  "_" "-"
        NSString *usernamePart = [email substringToIndex:range1.location];

        NSArray *stringsArray1 = [usernamePart componentsSeparatedByString:@"."];
        for (NSString *string in stringsArray1) {
            NSRange rangeOfInavlidChars=[string rangeOfCharacterFromSet: invalidCharSet];
            if(rangeOfInavlidChars.length !=0 || [string isEqualToString:@""])
                return NO;
        }
        NSString *domainPart = [email substringFromIndex:range1.location+1];
        NSArray *stringsArray2 = [domainPart componentsSeparatedByString:@"."];
        for (NSString *string in stringsArray2) {
            NSRange rangeOfInavlidChars=[string rangeOfCharacterFromSet:invalidCharSet];
            if(rangeOfInavlidChars.length !=0 || [string isEqualToString:@""])
                return NO;
        }
        return YES;
    }
    else // no '@' or '.' present
        return NO;
}

//For validating URL use following code ....

- (BOOL) validateUrl: (NSString *) candidate 
{
    NSString *urlRegEx =  @"((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+";

  NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; 

    if ([urlTest evaluateWithObject:candidate]) 
        return YES;
    else
        return NO;
}
Tisho
  • 8,320
  • 6
  • 44
  • 52
Nirav Patel
  • 432
  • 6
  • 19