前言
用正则表达式进行输入文本的控制是非常方便的,这里记录下如何根据正则表达式限制UITextField文本内容的输入。
代码
// 在UITextField的代理方法中处理
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if (string.length == 0) return YES;
//第一个参数,被替换字符串的range,第二个参数,即将键入或者粘贴的string,返回的textfield的新的文本内容
NSString *checkStr = [textField.text stringByReplacingCharactersInRange:range withString:string];
//正则表达式
NSString *regex = @"^[0-9]+$";
return [self validateStr:checkStr withRegex:regex];
}
// 根据正则表达式校验字符串
- (BOOL)validateStr:(NSString *)string withRegex:(NSString *)regex
{
NSPredicate *resultStr = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
return [resultStr evaluateWithObject:string];
}
总结
根据输入内容是否符合要求判断能否输入,这样就能达到控制输入内容的要求了,具体的内容怎么限制,要看正则表达式怎么样的了,上述表达式是限制输入的内容必须是数字。
常用正则表达式
// 密码校验
- (BOOL)validatePassword:(NSString *)passWord {
NSString *passWordRegex = @"^[a-zA-Z0-9]{6,20}+$";
NSPredicate *passWordPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",passWordRegex];
return [passWordPredicate evaluateWithObject:passWord];
}
// 手机号校验
- (BOOL)validatePhoneNum:(NSString *)phoneNum {
//手机号以1开头,10个 \d 数字字符
NSString *phoneRegex = @"^(1)\\d{10}$";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];
return [phoneTest evaluateWithObject:phoneNum];
}
//邮箱
- (BOOL) validateEmail:(NSString *)email
{
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:email];
}