我正在尝试使用范围限制为5来验证我的文本字段,并且也不允许在起始字符上仅插入0值,并且我还想限制具有特殊字符的文本字段,下面是我的代码我的两个函数范围限制和起始字符0接受工作正常,但特殊字符的重新启动不起作用,请你建议我有什么问题??
- (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string {
[self isNumeric:textField.text];
NSUInteger newLength = [textField.text length] + [string length] - range.length;
if (range.location == 0 && [string isEqualToString:@"0"]) {
return NO;
}
return (newLength > 5) ? NO : YES;
}
-(BOOL)isNumeric:(NSString*)inputString{
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_NUMBERS] invertedSet];
NSString *filtered = [[inputString componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
return [inputString isEqualToString:filtered];
}
答案 0 :(得分:0)
您不评估来自BOOL
的{{1}},因此您只是过滤了长度和0条件。
添加额外的if语句来解决此问题:
[self isNumeric:textField.text];
答案 1 :(得分:0)
尝试以下代码,让我知道它会有所帮助: -
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if([self isNumeric:string])
{
if([textField.text length]==0 && [string length]==1 && [string isEqualToString:@"0"])
{
return NO;
}
if([textField.text length]==5 && ![string isEqualToString:@""])
return NO;
}
else
{
return NO;
}
}
-(BOOL)isNumeric:(NSString*)inputString{
NSCharacterSet *acceptableCharacterSet = [NSCharacterSet characterSetWithCharactersInString: ACCEPTABLE_NUMBERS];
unichar c = [self getLastAddedStringAsCharacter:inputString];
if ([acceptableCharacterSet characterIsMember:c]){
return YES;
}
else if ([inputString isEqualToString:@""]){
return YES;
}
else{
return NO;
}
}
-(unichar)getLastAddedStringAsCharacter:(NSString *)lastStr{
if ([lastStr length]>0){
return [lastStr characterAtIndex:0];
}
else{
return '\0';
}
}
答案 2 :(得分:0)
我认为你想要的是限制5个数字字母,但0不能是第一个数字:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string{
NSString *resultStr = [textField.text stringByReplacingCharactersInRange:range withString:string];
if([self isNumeric:resultStr]){
if(resultStr.length <= 5){
if(resultStr.length >= 1){
NSString *firstLetter = [resultStr substringWithRange:NSMakeRange(0, 1)];
if(![firstLetter isEqualToString:@"0"]){
return YES;
}
}
else{
return YES;
}
}
}
return NO;
}
答案 3 :(得分:0)
检查这一个
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *currentString = [textField.text stringByReplacingCharactersInRange:range withString:string];
int length = [currentString length];
if (length > 5) {
return NO;
}
else if ([textField.text isEqual: @"0"]){
return N);
}
return YES;
}