iOS:在TextField中键入时强制用户输入有效的IP地址

时间:2015-11-26 09:36:55

标签: ios objective-c regex uitextfield uitextfielddelegate

我有一个用于IP地址的TextField。目前我点击这样的按钮验证我的IP地址:

LocaleUtil.setUserLocale()

但是,我的要求是当用户在TextField中输入文本时,我随时验证我的IP地址。

例如,当用户开始在TextField中输入时,应该允许他在IP地址中的任意三个点之前输入 0-255 之间的数字,即如果用户已输入26,则如果他输入除点之外的任何内容,则不应更改文本。同样,如果他输入除数字和点之外的任何其他字符,则文本不应更改。

我已经搜索了很多关于此事但没有找到任何帮助。任何有关这方面的帮助将不胜感激。

提前致谢!

2 个答案:

答案 0 :(得分:0)

(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
 ............
} 

上面这个方法会告诉你,当用户点击一个键来改变文本时,“粘贴”将导致多个字符在字符串中,退格一个,或者删除一个选择将导致字符串变为空了,

在此您可以检查字符0-255的范围。

原始答案如下。

Detecting whether the user has typed in a UITextField

答案 1 :(得分:0)

完整的答案是来自 stribizhev Muhammad 答案的评论的组合。上述功能可以通过以下方式实现:

  1. 添加_textfiled.delegate=self;
  2. ,使您的ViewController UITextFieldDelegate
  3. 以下列方式实施-(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;
        }
    
    
    }