【问题标题】:NSPredicate for mobile number validationNSPredicate 用于手机号码验证
【发布时间】:2013-03-01 06:12:51
【问题描述】:

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

规则:

最少 10 位数字

最多 10 位数字

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

【问题讨论】:

标签: ios xcode nspredicate


【解决方案1】:

基于正则表达式的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;
    }
    

    【讨论】:

    • @iBhavin bolo ibhavin
    【解决方案3】:
        NSString *phoneNumber = @"1234567890";
        NSString *phoneRegex = @"[789][0-9]{3}([0-9]{6})?"; 
        NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex]; 
        BOOL matches = [test evaluateWithObject:phoneNumber];
    

    【讨论】:

      【解决方案4】:

      以下代码将满足您的要求:

      功能:

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

      【讨论】:

        【解决方案5】:

        使用“扩展”使其全局化,在需要的地方使用它

        在您的任何一个视图控制器类中,最后一个}粘贴下面的代码

        extension String
        {
        func validateMobile() -> Bool
        {
            return NSPredicate(format: "SELF MATCHES %@","[789][0-9].{9}").evaluate(with: self)
         }
         }
        

        当您想在任何 ViewController 类中验证 yourTxtField 时,只需调用如下:

        if (yourTxtField.text?.validateMobile())!
        {
         print("It is 10 digit, starting with 7/8/9")
        }
        else
        {
         print("Invalid mobile number")
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-14
          • 2017-02-06
          • 1970-01-01
          • 1970-01-01
          • 2013-07-01
          • 2013-12-20
          相关资源
          最近更新 更多