Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSPredicate for mobile number validation

How to validate a phone number (NSString *) by NSPredicate?

Rules:

minimum 10 digits

maximum 10 digits

the first digit must be 7,8 or 9 Thanks

like image 404
Harshit K Avatar asked Mar 03 '26 03:03

Harshit K


2 Answers

An NSPredicate based on a regular expression will fit your requirements.

NSString *stringToBeTested = @"8123456789";

NSString *mobileNumberPattern = @"[789][0-9]{9}";
NSPredicate *mobileNumberPred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", mobileNumberPattern];

BOOL matched = [mobileNumberPred evaluateWithObject:stringToBeTested];

You don't need to keep the pattern in a string by itself, but regexes are complicated enough already so it makes the overall code clearer if you keep it out of the NSPredicate format string.

like image 191
Monolo Avatar answered Mar 04 '26 17:03

Monolo


You can just use below code

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;   // return NO to not change text
 {
  if(textField.tag == 111)
    {
    if([self MobileNumberValidate:string] == TRUE)
    return YES;
    else
    return NO;
}
return YES;
}

#pragma mark - Mobile Number validation
- (BOOL)MobileNumberValidate:(NSString*)number
{
NSString *numberRegEx = @"[0-9]";
NSPredicate *numberTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", numberRegEx];
if ([numberTest evaluateWithObject:number] == YES)
    return TRUE;
else
    return FALSE;
}
like image 20
Kirtikumar A. Avatar answered Mar 04 '26 16:03

Kirtikumar A.