0

我尝试使用特殊字符验证文本字段,

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

我用这段代码来验证文本字段,

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

     if([[string stringByTrimmingCharactersInSet:invalidNumberSet]isEqualToString:@""])
     {
        return NO;
     }
     else
     {
        return YES;
     }
}

请建议我该怎么做?

4

2 回答 2

2

像这样创建通用函数来实现您的功能,

-(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;
} 

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

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

希望这对你有帮助..

于 2012-08-01T11:48:33.630 回答
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;
    }

另一种选择是正则表达式。希望这可能对你有所帮助。

于 2012-08-01T11:48:06.740 回答