2014-03-05 38 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 
相關問題