Hallo!
Ich habe etwas mit NSFormatter herumgespielt und würde gerne möglichst elegant mittlels isPartialStringValid verhindern,
dass man etwas Falsches eintippen kann, also etwa 259.0.900.. statt 80.150.123.39
Hat jemand schon versucht dies zu implementieren?
Oder gibt es irgendwo ein Beispiel?
Mein bisheriger fehlerhafter Ansatz:
-(bool)isPartialStringValid:(NSString*)partialString
newEditingString:(NSString**) newString
errorDescription:(NSString**)error
{
NSCharacterSet *nonNumbers;
NSCharacterSet *seachDot;
nonNumbers = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789xX."] invertedSet];
seachDot = [NSCharacterSet characterSetWithCharactersInString:@"."];
	
if ([partialString rangeOfCharacterFromSet: nonNumbers options: NSLiteralSearch].location != NSNotFound)
{
return NO;
}
else
{
// regular expression is:
/*
\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
*/
 
NSLog(@"%@",partialString);
if ([partialString length]>0)
{
// ----- 3 digits
if ([partialString length] == 3) // 255 249 29. 099 199 19.
{
if ([partialString characterAtIndex:0] == '2')
{
if ([partialString characterAtIndex:1] == '5')
{
if ([partialString characterAtIndex:2] == '.')
{
NSLog(@"YES_.");
return YES;
}
else
if (([partialString characterAtIndex:2] > '5') && ([partialString characterAtIndex:2] <= '9'))
{
NSLog(@"No_1");
return NO;
}
}
else
if (([partialString characterAtIndex:1] >= '0') && ([partialString characterAtIndex:1] <= '4'))
{
// everything 0..9 and dot allowed
NSLog(@"YES_1");
return YES;
}
}
else
if (([partialString characterAtIndex:0] == '0') ([partialString characterAtIndex:0] == '1'))
 ([partialString characterAtIndex:0] == '1'))
{
// everything 0..9 and dot allowed
NSLog(@"YES_2");
return YES;
}
else
{
NSLog(@"No_2");
return NO;
}
}
// ----- 3 digits
else
{
// ----- 1 digits
if ([partialString length] == 1)
{
if ([partialString characterAtIndex:0] == '.')
{
NSLog(@"NO_.");
return NO;
}
}
else
{
NSLog(@"YES_not 3");
return YES;
}
}
 
}
else
{
return YES;
}
}
...
									
									
								Ich habe etwas mit NSFormatter herumgespielt und würde gerne möglichst elegant mittlels isPartialStringValid verhindern,
dass man etwas Falsches eintippen kann, also etwa 259.0.900.. statt 80.150.123.39
Hat jemand schon versucht dies zu implementieren?
Oder gibt es irgendwo ein Beispiel?
Mein bisheriger fehlerhafter Ansatz:
-(bool)isPartialStringValid:(NSString*)partialString
newEditingString:(NSString**) newString
errorDescription:(NSString**)error
{
NSCharacterSet *nonNumbers;
NSCharacterSet *seachDot;
nonNumbers = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789xX."] invertedSet];
seachDot = [NSCharacterSet characterSetWithCharactersInString:@"."];
if ([partialString rangeOfCharacterFromSet: nonNumbers options: NSLiteralSearch].location != NSNotFound)
{
return NO;
}
else
{
// regular expression is:
/*
\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
*/
NSLog(@"%@",partialString);
if ([partialString length]>0)
{
// ----- 3 digits
if ([partialString length] == 3) // 255 249 29. 099 199 19.
{
if ([partialString characterAtIndex:0] == '2')
{
if ([partialString characterAtIndex:1] == '5')
{
if ([partialString characterAtIndex:2] == '.')
{
NSLog(@"YES_.");
return YES;
}
else
if (([partialString characterAtIndex:2] > '5') && ([partialString characterAtIndex:2] <= '9'))
{
NSLog(@"No_1");
return NO;
}
}
else
if (([partialString characterAtIndex:1] >= '0') && ([partialString characterAtIndex:1] <= '4'))
{
// everything 0..9 and dot allowed
NSLog(@"YES_1");
return YES;
}
}
else
if (([partialString characterAtIndex:0] == '0')
 ([partialString characterAtIndex:0] == '1'))
 ([partialString characterAtIndex:0] == '1')){
// everything 0..9 and dot allowed
NSLog(@"YES_2");
return YES;
}
else
{
NSLog(@"No_2");
return NO;
}
}
// ----- 3 digits
else
{
// ----- 1 digits
if ([partialString length] == 1)
{
if ([partialString characterAtIndex:0] == '.')
{
NSLog(@"NO_.");
return NO;
}
}
else
{
NSLog(@"YES_not 3");
return YES;
}
}
}
else
{
return YES;
}
}
...
