验证带有特殊字符的Textfield时,键盘退格按钮不起作用

时间:2012-08-01 11:21:54

标签: iphone objective-c cocoa-touch ios4

我尝试使用特殊字符

验证文本字段

但是,按下键盘上的删除按钮。文本归档数据未删除。

我使用此代码验证Textfield,

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
      NSCharacterSet * invalidNumberSet = [NSCharacterSet characterSetWithCharactersInString:@"_!@#$%^&*()[]{}'\"<>:;|\\/?+=~`"];

     if([[string stringByTrimmingCharactersInSet:invalidNumberSet]isEqualToString:@""])
     {
        return NO;
     }
     else
     {
        return YES;
     }
}
请告诉我,我该怎么做?

2 个答案:

答案 0 :(得分:2)

创建这样的Common函数来实现您的功能

-(BOOL)isNumeric:(NSString *)pTmpString
{
    BOOL isValid = YES;
    NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"_!@#$%^&*()[]{}'\"<>:;|\\/?+=~`"];
    for (int i = 0; i < [pTmpString length]; i++) 
    {
        unichar c = [pTmpString characterAtIndex:i];
        if ([myCharSet characterIsMember:c]) 
            isValid = NO;
    }
    return isValid;
}

并将其用作

- (BOOL)textField:(UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
    BOOL isValid = [self isNumeric:string];    
    return isValid;
} 

虽然您按下键盘上的字母,但这不会接受键盘到文本字段的特殊字符。

如果您有任何疑问,请告诉我......我会帮助您..

希望这会对你有所帮助..

答案 1 :(得分:0)

对于防止那些特殊的词我建议这可能会有所帮助,并且有很多选项可以阻止这种类型的字符串匹配,这是我建议你的方式之一。

   if([string isEqualToString:@"_"] || [string isEqualToString:@"@"] || [string isEqualToString:@"#"] || [string isEqualToString:@"$"] || [string isEqualToString:@"%"] ||  [string isEqualToString:@"^"] ||  [string isEqualToString:@"&"] ||  [string isEqualToString:@"*"] ||  [string isEqualToString:@"("] ||  [string isEqualToString:@")"] ||  [string isEqualToString:@"["] ||  [string isEqualToString:@"]"] ||  [string isEqualToString:@"{"] || [string isEqualToString:@"'"] || [string isEqualToString:@"\""] || [string isEqualToString:@"\\"] || [string isEqualToString:@"<"] || [string isEqualToString:@">"]|| [string isEqualToString:@":"]|| [string isEqualToString:@";"]|| [string isEqualToString:@"|"]|| [string isEqualToString:@"/"]|| [string isEqualToString:@"?"]|| [string isEqualToString:@"+"] || [string isEqualToString:@"="]|| [string isEqualToString:@"~"]  ) {
        return NO;
    }else{
        return YES;
    }

另一种选择是Regex。 希望这对你有所帮助。