1

I am working on iOS. I have a text field on which it should have range to 7 digits, and avoid special characters also. I only want to enter number from 0-9999999. Please help

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{    
       if(range.length + range.location > textField.text.length)
       {
          return NO;
       }

        NSUInteger newLength = [textField.text length] + [string length] - range.length;
        return newLength <= 7;

}
Asad Ali
  • 55
  • 6

2 Answers2

2

Use this

#define acceptableCharacterSet @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:acceptableCharacterSet] invertedSet];

    NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];

    if(![string isEqualToString:filtered])
        return NO;
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > 7) ? NO : YES;
}
Awesome.Apple
  • 1,316
  • 1
  • 11
  • 24
0

In your textfield delegate method shouldChangeCharactersInRange

This will only allow 0-9 numbers will not allow alphabets and will not allow special characters

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSCharacterSet *aCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
            for (int i = 0; i < [string length]; i++) {
                unichar aCharacter = [string characterAtIndex:i];
                if (![aCharacterSet characterIsMember:aCharacter]) {
                    return NO;
                }
                  return YES;
            }

}
Milap Kundalia
  • 1,566
  • 1
  • 16
  • 24