NSPredicate用于手机号码验证

问题描述 投票:3回答:4

如何通过NSPredicate验证电话号码(NSString *)?

规则:

最少10位数

最多10位数

第一个数字必须是7,8或9谢谢

ios xcode nspredicate
4个回答
6
投票

基于正则表达式的NSPredicate将符合您的要求。

NSString *stringToBeTested = @"8123456789";

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

BOOL matched = [mobileNumberPred evaluateWithObject:stringToBeTested];

您不需要将模式本身保留在字符串中,但正则表达式已足够复杂,因此如果将其保留在NSPredicate格式字符串之外,则会使整个代码更清晰。


2
投票

你可以使用下面的代码

- (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;
}

0
投票
    NSString *phoneNumber = @"1234567890";
    NSString *phoneRegex = @"[789][0-9]{3}([0-9]{6})?"; 
    NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex]; 
    BOOL matches = [test evaluateWithObject:phoneNumber];

0
投票

以下代码适用于您的要求:

功能:

-(BOOL)validatePhone:(NSString *)enteredPhoneNumber
{
    NSString *phoneRegex = @"[789][0-9]{9}";
  // OR below for advanced type 
  //NSString *phoneRegex = @"^((\\+)|(00))[0-9]{6,14}$";

    NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];

    return [phoneTest evaluateWithObject:enteredPhoneNumber];
}  

叫它:

if ([self validatePhone:@"9833112299"])
        {
            NSLog(@"Valid Phone Number");
        }
        else
        {
            NSLog(@"Invalid Phone Number");
        }
© www.soinside.com 2019 - 2024. All rights reserved.