【问题标题】:Keypad backspace button not working when validate Textfield with special characters使用特殊字符验证文本字段时,键盘退格按钮不起作用
【发布时间】:2012-08-01 11:21:54
【问题描述】:
我尝试使用特殊字符验证文本字段,
但是,按下键盘上的删除按钮。文本字段数据未删除。
我使用此代码来验证文本字段,
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSCharacterSet * invalidNumberSet = [NSCharacterSet characterSetWithCharactersInString:@"_!@#$%^&*()[]{}'\"<>:;|\\/?+=~`"];
if([[string stringByTrimmingCharactersInSet:invalidNumberSet]isEqualToString:@""])
{
return NO;
}
else
{
return YES;
}
}
请告诉我我该怎么做?
【问题讨论】:
标签:
iphone
objective-c
cocoa-touch
ios4
【解决方案1】:
像这样创建通用函数来实现您的功能,
-(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;
}
这不会接受来自键盘的特殊字符到文本字段,尽管您按键盘上的字母。
如果您有任何疑问,请告诉我..我会帮助您..
希望这对你有帮助..
【解决方案2】:
为了防止那些特殊的词,我建议这可能会有所帮助,并且有很多选项可以防止这种类型的字符串匹配我向您建议的一种方式,如下所示。
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;
}
另一种选择是正则表达式。
希望这对您有所帮助。