2014-03-05 41 views
0

在textfield中,我想限制数字(如(1234567890))和特殊字符,但我希望允许使用字母数字字符。我怎么想这样做?如何限制objective-c中的数字和特殊字符

+0

@Merlevede请先阅读,我不是只要求数字。我想限制数字,特殊字符并希望允许APLHA NUMERICS。 –

+0

在我建议的链接中有一个可以根据需要进行调整的答案。不要期望例子正是你想要的。 – Merlevede

回答

0

使用的UITextField委托方法

textField:shouldChangeCharactersInRange:replacementString: 

要检查即将被替换,如果你允许它然后返回是如果没有则没有返回的字符串。

这是一些更多的信息。

Apple UITextField Delegate

0

试试下面的代码

+ (BOOL)isNumber:(NSString *)value { 

    if ((value == nil) || ([@"" isEqualToString:value])) { 
     return NO; 
    } 

    int l = [value length]; 

    BOOL b = NO; 
    for (int i = 0; i < l; i++) { 
     NSString *str = 
     [[value substringFromIndex:i] 
     substringToIndex:1]; 

     const char *c = 
     [str cStringUsingEncoding: 
     NSASCIIStringEncoding]; 

     if (c == NULL) { 
      b = NO; 
      break; 
     } 

     if ((c[0] >= 0x30) && (c[0] <= 0x39)) { 
      b = YES; 
     } else { 
      b = NO; 
      break; 
     } 
    } 

    if (b) { 
     return YES; 
    } else { 
     return NO; 
    } 
} 


-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    if ((string != nil) && (string != @"")) { 
     if (![self isNumber:string]) { 
      return NO; 
     } 
    } 
    return YES; 
} 
0

你需要写一个NSFormatter并将其分配给您的文本字段。这里是一个NSFormatter的示例实现,它使用NSRegularExpression来验证NSTextField内容。

@interface XXNameElementFormatter : NSFormatter 
@end 

@implementation HcNameElementFormatter { 
    NSRegularExpression *_re; 
} 

- (id)init { 
    self = [super init]; 
    if (self) { 
     [self initRegularExpression]; 
    } 
    return self; 
} 

- (void)awakeFromNib 
{ 
    [self initRegularExpression]; 
} 

- (void)initRegularExpression 
{ 
    NSError *reError; 
    _re = [NSRegularExpression regularExpressionWithPattern:@"^[a-z]*$" options:NSRegularExpressionCaseInsensitive error:&reError]; 
    NSAssert(_re != nil, @"Error in regular expression, error: %@", reError); 
} 

- (NSString *)stringForObjectValue:(id)obj 
{ 
    return obj; 
} 


- (BOOL)getObjectValue:(out __autoreleasing id *)obj forString:(NSString *)string errorDescription:(out NSString *__autoreleasing *)error 
{ 
    *obj = string; 
    return YES; 
} 

- (BOOL)isPartialStringValid:(NSString *__autoreleasing *)partialStringPtr proposedSelectedRange:(NSRangePointer)proposedSelRangePtr originalString:(NSString *)origString originalSelectedRange:(NSRange)origSelRange errorDescription:(NSString *__autoreleasing *)error 
{ 
    NSParameterAssert(partialStringPtr != nil); 
    NSString *partialString = *partialStringPtr; 
    NSRange firstMatch = [_re rangeOfFirstMatchInString:*partialStringPtr options:0 range:NSMakeRange(0, partialString.length)]; 
    return firstMatch.location != NSNotFound; 
} 

@end 
相关问题