2013-01-16 4 views
2

숫자 나 특수 문자를 입력 할 때 문자 만 허용하고 오류를 표시하려면 UITextField를 만들고 싶습니다.하지만 그렇게 할 때 알파벳을 입력하면 오류도 표시됩니다. 어디로 가는지 이해할 수 없습니다 잘못된?textField에 알파벳 만 허용하기

NSString *[email protected]"[A-Za-z]"; 
NSPredicate *FNametest=[NSPredicate predicateWithFormat:@"SELF MATCHES %@",FNameReg]; 
if(![FNametest evaluateWithObject:txtfirstname.text]) 
    { 
     lblvalidateFName.hidden=NO; 
     [testScroll setContentOffset:CGPointMake(0 , 74)]; 
     return; 
    } 

이제 알파벳을 줄 때도 오류가 표시됩니다. 그렇습니까?

+0

귀하의 코드가 정확한지 :

-(BOOL) validateAlphabets: (NSString *)alpha { NSString *abnRegex = @"[A-Za-z]+"; // check for one or more occurrence of string you can also use * instead + for ignoring null value NSPredicate *abnTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", abnRegex]; BOOL isValid = [abnTest evaluateWithObject:alpha]; return isValid; } 

지금 당신이 이런 식으로 원하는 유효성을 확인 : –

답변

6

아래 코드로 알파벳 문자열의 유효성을 검사 할 수 있습니다. 당신은 단지 알파벳을 허용 할 경우, 코드 아래 NSCharacterSet

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
     if(textField == yourTextField) 
     { 
      NSCharacterSet *invalidCharSet = [[NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"] invertedSet]; 
      NSString *filtered = [[string componentsSeparatedByCharactersInSet:invalidCharSet] componentsJoinedByString:@""]; 
      return [string isEqualToString:filtered]; 
     } 

     return YES; 
} 
+0

하지만 코드에 무슨 문제가 있습니까? 다른 경우에서 작동하고 있습니다. 버튼 클릭 이벤트에서 확인합니다 – Honey

+0

코드를 사용할 때 얻는 결과는 무엇입니까 ?? 어떤 오류라도 의미합니까? –

+0

숫자 나 특수 문자가 나타나는 경우 "영문자 만 입력하십시오"라는 레이블이 표시되었습니다. 따라서 영문자도 입력하면 제 경우에 루프로 입력됩니다 – Honey

2

시도 내 친구를 사용 NSPredicate

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 

    return [self validateStringWithAlphabet:string]; 
} 

- (BOOL)validateStringWithAlphabet:(NSString *)string { 
    NSString *stringRegex = @"[A-Za-z]"; 
    NSPredicate *stringPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", stringRegex]; 

    return [stringPredicate evaluateWithObject:string]; 
} 

를 사용

.

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 

    NSCharacterSet *nonNumberSet = [[NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"] invertedSet]; 

    NSString *trimmedReplacement = [[ text componentsSeparatedByCharactersInSet: nonNumberSet] componentsJoinedByString:@""]; 

    return ([text stringByTrimmingCharactersInSet:nonNumberSet].length > 0); 

} 

내가 작동하는지 여부를 알려주세요 !!!!

해피 코딩 !!!!!

bool checkAlphabets = [self validateAlphabets:txtfirstname.text]; 

if(!checkAlphabets) 
{ 
    NSLog(@"Not Matches.."); 
} 
else 
{ 
    NSLog(@"Matches.."); 
} 
+0

@Paras Joshi 답변 동급과 동일합니다 .. –

8

이 같은 검증을위한 하나의 방법을 만듭니다. 오류를 일으키는 다른 실수가있을 수 있습니다.
+0

Thanks buddy :) – Abo3atef

1
Check this out . First if block for backspace , next if to allow only letters , next if to allow only numbers. 

    - (BOOL)textField:(UITextField *)field shouldChangeCharactersInRange:(NSRange)range  replacementString:(NSString *)characters 
{ 
NSCharacterSet *blockedCharacters = [[NSCharacterSet alphanumericCharacterSet] invertedSet] ; 
NSCharacterSet *letters = [NSCharacterSet letterCharacterSet] ; 
NSCharacterSet *numbers = [NSCharacterSet decimalDigitCharacterSet] ; 

NSLog(@"%@",[blockedCharacters description]); 

//for allowing backspace. 
if([characters isEqualToString:@""]) 
{ 
    return true; 
} 
if(field==self.firstNameTextField || field==self.lastNameTextField || field==self.addrLocalityTextField || field==self.addrRegionField){ 


    if([characters rangeOfCharacterFromSet:letters].location) { 
     [self shakeWithIterations:0 direction:1 size:4 view:field]; 

     return false; 
    } 
} 

if(field==self.addrPostalCodeTextField || field==self.accountNumTextField || field==self.routingNumTextField){ 

    if(field==self.addrPostalCodeTextField){ 
    NSUInteger newLength = [addrPostalCodeTextField.text length] + [characters length] - range.length; 
    return (newLength > 5) ? NO : YES; 
    } 
    if([characters rangeOfCharacterFromSet:numbers].location) { 
     [self shakeWithIterations:0 direction:1 size:4 view:field]; 
     return false; 
    } 
} 
return true;} 
2
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 

NSCharacterSet *blockedCharacters = [[NSCharacterSet whitespaceCharacterSet] invertedSet]; NSCharacterSet *blockedCharacters2 = [[NSCharacterSet letterCharacterSet]invertedSet]; 

if([string rangeOfCharacterFromSet:blockedCharacters].location == NSNotFound || [string rangeOfCharacterFromSet:blockedCharacters2].location) 
{ 

// enter your alert 
[alert show]; 
} 
return ([string rangeOfCharacterFromSet:blockedCharacters].location == NSNotFound || [string rangeOfCharacterFromSet:blockedCharacters2].location) ; 

} 
관련 문제