을해야 입력 :이 shouldChangeCharactersInRange
대표 방법으로 수행해야합니다 알고 #### 1234 AA textfield
.nut입니다. 각 캐릭터의 상태가 어떻게 구현되는지 이해할 수 없습니다. 제안을 해주십시오. 미리 감사드립니다!textField.text 할 내가 <code>textfield</code>을 가지고 있고 텍스트는 형식으로 입력 할하려는 특정 형식을
답변
식을 시도해보십시오 여기
^[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;
}
희망!
@Prez, 귀하의 질문 내용이 변경되었는지 확인했습니다. 어쨌든, 당신이 그것을 보니 기쁘다. – NeverHopeless
고마워요. 선생님 ... 나는 완벽한 일을 성취했지만 백 스페이스에서 충돌하는 이유를 이해할 수 없습니다. 그에 대한 지침을 제공해 주시겠습니까? – Prez
현재 솔루션은 백 스페이스 처리를 지원하며'|| string.length == 0'과'range : NSMakeRange (0, combinedText.length)'를 사용한다. 코드에도이 코드가 있습니까? – NeverHopeless
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;
}
여기에 구현해야 할 정규 표현식을 도와 드릴까요? – Prez
일 수 있습니다 귀하의 요구를 확인하는 것이 도움이 될 수있는이
-(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] ;
}
당신의 시도한 코드를 보여주세요 –