我有一个用于IP地址的TextField。目前我点击这样的按钮验证我的IP地址:
LocaleUtil.setUserLocale()
但是,我的要求是当用户在TextField中输入文本时,我随时验证我的IP地址。
例如,当用户开始在TextField中输入时,应该允许他在IP地址中的任意三个点之前输入 0-255 之间的数字,即如果用户已输入26,则如果他输入除点之外的任何内容,则不应更改文本。同样,如果他输入除数字和点之外的任何其他字符,则文本不应更改。
我已经搜索了很多关于此事但没有找到任何帮助。任何有关这方面的帮助将不胜感激。
提前致谢!
答案 0 :(得分:0)
(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
............
}
上面这个方法会告诉你,当用户点击一个键来改变文本时,“粘贴”将导致多个字符在字符串中,退格一个,或者删除一个选择将导致字符串变为空了,
在此您可以检查字符0-255的范围。
原始答案如下。
答案 1 :(得分:0)
完整的答案是来自 stribizhev 和 Muhammad 答案的评论的组合。上述功能可以通过以下方式实现:
_textfiled.delegate=self;
以下列方式实施-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSString* ipEntered;
if (![string isEqualToString:@""]) {
ipEntered=[NSString stringWithFormat:@"%@%@",[textfield.text substringToIndex: range.location],string];
}
NSString* validIPRegEx = @"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])[.]){0,3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])?$";
NSPredicate * emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", validIPRegEx];
if ([string isEqualToString:@""]) {
return YES;
}
else if ([emailTest evaluateWithObject:ipEntered]){
return YES;
}
else{
return NO;
}
}