iOS开发 | textField输入指定字符

在实际开发过程中经常会用到指定字符的情况
比如纯数字,纯英文,不允许输入特殊字符等情况

现在我们来罗列一下常用的几种情况:

1. 只能输入纯数字
  • 这种情况可以说是最简单的一种情况, 只需将keyboardType属性设置为数字键盘即可
textField. keyboardType = UIKeyboardTypeNumberPad 
  • 当然如果你想通过代理来设置所输入的字符是否为纯数字也是可以的。
#define NUMBERS @"0123456789"
/**
*  判断是否为纯数字
*/
- (BOOL)validateNumber:(NSString *) numberStr
{
   NSCharacterSet * character = [[NSCharacterSet characterSetWithCharactersInString: NUMBERS] invertedSet];
   NSString * filtered = [[numberStr componentsSeparatedByCharactersInSet:character] componentsJoinedByString:@""];
   
   return [numberStr isEqualToString:filtered];
}
2. 只能输入纯英文(包括大小写)
  • 只能为小写
  1. 第一种方式就是把上面的宏改成
#define LETTER @"abcdefghijklmnopqrstuvwxyz"
  1. 我们主要说一下第二种方式 -- 正则表达式
- (BOOL)onlyInputACapital:(NSString*)string
{
  NSString *regex =@"[A-Z]*";
  NSPredicate *predicate = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",regex];
  BOOL inputString = [predicateevaluateWithObject:string];
  returninputString;
}
  • 只能为大写
    同样两种方式都能实现
  1. 改宏
#define LETTER @"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  1. 改正则表达式
- (BOOL)onlyInputACapital:(NSString*)string
{
  NSString *regex =@"[A-Z]*";
  NSPredicate *predicate = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",regex];
  BOOL inputString = [predicateevaluateWithObject:string];
  returninputString;
}
  • 允许大小写
  1. 同上
#define LETTER @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
  1. 正则表达式
- (BOOL)InputCapitalAndLowercaseLetter:(NSString*)string
{
  NSString *regex =@"[a-zA-Z]*";
  NSPredicate *predicate = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",regex];
  BOOL  inputString = [predicateevaluateWithObject:string];
  return inputString;
}
3. 英文数字相结合

改宏的我就不再说了. 接下来主要说的还是用正则表达式来判断

  1. 允许输入英文数字组合(不限字数)
- (BOOL)inputLettersOrNumbers:(NSString*)string
{
  NSString *regex =@"[a-zA-Z0-9]*";
  NSPredicate *predicate = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",regex];
  BOOL  inputString = [predicateevaluateWithObject:string];
  return inputString;
}
  1. 允许输入英文数字组合(限字数)
- (BOOL)inputNumberOrLetters:(NSString*)name
{
  NSString *userNameRegex =@"^[A-Za-z0-9]{6,20}+$";
  NSPredicate *userNamePredicate = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",userNameRegex];
  BOOL  inputString = [userNamePredicateevaluateWithObject:name];
  return inputString;
}
4. 不允许输入特殊字符
- (BOOL)filteringSpecialCharacter:(NSString *)string
{
   // 特殊字符分全角跟半角的区别, 这里都需要包含.
   NSString * spacelStr = @"@/:;()¥「」"、[]{}#%-*+=_\\|~<>$€^•'@#$%^&*()_+'\"";
   NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:spacelStr];
   NSString *newString = [string stringByTrimmingCharactersInSet:set];
   return [string isEqualToString:newString];
}
5. 纯中文模式
  • 这种情况用的不是很多, 但是也有用到的时候。
    这个不能在shouldChangeCharactersInRange代理中使用,
    用户在输入中文汉字的同时, shouldChangeCharactersInRange会调用多次log用户输入的每一个字符所以中文判断只能放在textFieldShouldEndEditing等类似结束的方法里判断
/**
*  判断是否为汉字
*/
- (BOOL)isChinese
{
   NSString * match = @"(^[\u4e00-\u9fa5]+$)";
   NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF matches %@", match];
   return [predicate evaluateWithObject:self];
}

你可能感兴趣的:(iOS开发 | textField输入指定字符)