2017-04-26 11 views

답변

0

식을 시도해보십시오 여기

^[a-z]{2}\s\d{4}\s\d{4}$ 

:

  • ^는 - 쇼는 문자열
  • [a-z]{2}의 시작 - 정확히 2 배
  • \s A-Z 사이의 모든 문자를 표시합니다 - 공백 문자를 한 시간을 표시합니다.
  • \d{4} - 0-9 사이의 모든 숫자를 정확히 4 번 표시합니다.
  • $이 - 문자열

의 끝을 보여줍니다 해결 등의 예는이 될 수있다, 여기에 까다로운 부분은 건설 문자열에서 허용하는 것입니다 도움이

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSError *error = NULL; 
    NSRegularExpression *regex = nil; 

    NSMutableString *combinedText = [textField.text mutableCopy]; 
    [combinedText replaceCharactersInRange:range withString:string]; 

    switch (combinedText.length) { 
     case 1: 
     case 2: 
      regex = [NSRegularExpression regularExpressionWithPattern:[NSString stringWithFormat:@"^[a-z]{%ld}", (long)combinedText.length] options:NSRegularExpressionCaseInsensitive error:&error]; 
      break; 
     case 3: 
      regex = [NSRegularExpression regularExpressionWithPattern:@"^[a-z]{2}\\s" options:NSRegularExpressionCaseInsensitive error:&error]; 
      break; 
     case 4: 
     case 5: 
     case 6: 
     case 7: 
      regex = [NSRegularExpression regularExpressionWithPattern:[NSString stringWithFormat:@"^[a-z]{2}\\s\\d{%ld}", (long)combinedText.length - 3] options:NSRegularExpressionCaseInsensitive error:&error]; 
      break; 
     case 8: 
      regex = [NSRegularExpression regularExpressionWithPattern:@"^[a-z]{2}\\s\\d{4}\\s" options:NSRegularExpressionCaseInsensitive error:&error]; 
      break; 
     case 9: 
     case 10: 
     case 11: 
     case 12: 
      regex = [NSRegularExpression regularExpressionWithPattern:[NSString stringWithFormat:@"^[a-z]{2}\\s\\d{4}\\s\\d{%ld}$", (long)combinedText.length - 8] options:NSRegularExpressionCaseInsensitive error:&error]; 
      break; 
     default: 
      return false; 
    } 

    if(error) return false;   

    NSUInteger numberOfMatches = [regex numberOfMatchesInString:combinedText options:0 range:NSMakeRange(0, combinedText.length)]; 
    return numberOfMatches > 0 || string.length == 0; 
} 

희망!

+0

@Prez, 귀하의 질문 내용이 변경되었는지 확인했습니다. 어쨌든, 당신이 그것을 보니 기쁘다. – NeverHopeless

+0

고마워요. 선생님 ... 나는 완벽한 일을 성취했지만 백 스페이스에서 충돌하는 이유를 이해할 수 없습니다. 그에 대한 지침을 제공해 주시겠습니까? – Prez

+0

현재 솔루션은 백 스페이스 처리를 지원하며'|| string.length == 0'과'range : NSMakeRange (0, combinedText.length)'를 사용한다. 코드에도이 코드가 있습니까? – NeverHopeless

0

UITextField에서 카테고리를 만들고 조건에 따라이 메소드 쓰기 조건을 추가하십시오. 이메일 ID 예를 들어 아래 :

- (BOOL)validateRegEx:(NSString*)regexString 
{ 
    NSError *error = NULL; 
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexString 
                     options:NSRegularExpressionCaseInsensitive 
                     error:&error]; 
    NSUInteger numberOfMatches = [regex numberOfMatchesInString:self.text 
                options:0 
                 range:NSMakeRange(0, [self.text length])]; 

    return numberOfMatches > 0; 
} 
+0

여기에 구현해야 할 정규 표현식을 도와 드릴까요? – Prez

0

일 수 있습니다 귀하의 요구를 확인하는 것이 도움이 될 수있는이

-(BOOL)checkString:(NSString *)str{ 
    NSString *regex1 = @"^[a-bA-B0-9]"; // chabge regex as per your needs 
    NSPredicate *test1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex1]; 
    return [test1 evaluateWithObject:str] ; 
} 
+0

여기서 구현해야 할 정규 표현식을 도와 줄 수 있습니까? – Prez

+0

. 여기에서 업데이트를 기다려주십시오. – KKRocks