首页 > 其他分享 >UITextField中文输入法输入时对字符长度的限制 输入时对字符类型的限制

UITextField中文输入法输入时对字符长度的限制 输入时对字符类型的限制

时间:2023-08-23 12:33:19浏览次数:51  
标签:regex 字符 输入法 NSPredicate NSString cs textField 输入 define

检索一个字符串的长度的话:直接用 length,去进行判断就行了,

如果要检索字符串是否是自己要限制的类型的话,可以用正则表达式:

举个例子:
   匹配9-15个由字母/数字组成的字符串的正则表达式:

NSString * regex = @"^[A-Za-z0-9]{9,15}$";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    BOOL isMatch = [pred evaluateWithObject:txtfldPhoneNumber.text];

 

如果只限制让输入中文和英文的话,可以这样设置:
NSString *regex = @"[a-zA-Z\u4e00-\u9fa5][a-zA-Z\u4e00-\u9fa5]+";
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
            
   if(![pred evaluateWithObject: _textField.text])
     {
        //此动画为弹出
        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"昵称只能由中文、字母组成" delegate:self cancelButtonTitle:@"确定" otherButtonTitles: nil];
        [alertView show];
        return;
     }else
     {
        //代理方法的实现
        [self.delegate sendName:_textField.text];
        [self.navigationController popViewControllerAnimated:YES];
     }

 

如果要单个限制的话,可以宏定义:
#define NUMBERS     @"0123456789\n"
#define kAlphaNum   @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
#define kAlpha      @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
#define kNumber     @"0123456789"
#define kHans       @"zh-Hans"
#define HNMUBERS     @"0123456789./*-+~!@#$%^&()_+-=,./;'[]{}:<>?`"
然后在-(BOOL)textField:(UITextField *)textField 
shouldChangeCharactersInRange:(NSRange)range 
replacementString:(NSString *)string 方法里面进行限制的操作:
    NSCharacterSet *cs;
    
    cs = [[NSCharacterSet characterSetWithCharactersInString:HNMUBERS]invertedSet];
    
    NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs]componentsJoinedByString:@""]; //按cs分离出数组,数组按@""分离出字符串
    
    BOOL canChange = [string isEqualToString:filtered];
    
    if(canChange) {

        [WYTools showTextOnlyHud:@"请输入英文或中文" delay:1.0];
        return NO;
    }
    
    return YES;
替换不同的宏定义就可以了!

 


作者:稻草人11223

标签:regex,字符,输入法,NSPredicate,NSString,cs,textField,输入,define
From: https://blog.51cto.com/u_13188203/7201360

相关文章

  • Pandas字符串操作的各种方法速度测试
    由于LLM的发展,很多的数据集都是以DF的形式发布的,所以通过Pandas操作字符串的要求变得越来越高了,所以本文将对字符串操作方法进行基准测试,看看它们是如何影响pandas的性能的。因为一旦Pandas在处理数据时超过一定限制,它们的行为就会很奇怪。我们用Faker创建了一个100,000行的测......
  • java字符串乱码判断
    publicstaticbooleanerrCodes(Stringstr){return!(java.nio.charset.Charset.forName("GBK").newEncoder().canEncode(str));}//扩展判断是否为中文publicstaticbooleancheckChinese(charch){returnString.valueOf(ch).match......
  • Python基础入门学习笔记 015字符串:格式化
     字符串格式化符号含义 将ASCII码97对应的字符输出 格式化整数 格式化操作符辅助命令5表示输出为五位数Python的转义字符及其含义......
  • ubuntu/linux 好用的截图工具 搜狗输入法自带的截图快捷键,自己觉得不方便的话,修改为
    公司要求使用ubuntu开发,在安装完必要得开发工具之后,按照我在windows平台的习惯,就准备安装一个好用的截图工具了,我比较推荐的是snipaste([https://zh.snipaste.com/download.html)]),同时QQ,微信的自带快捷键也十分好用。以下分别是windowsQQ微信的截图方式,非常好用。好的,不墨......
  • Leetcode 459——重复的子字符串
    给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。示例1:输入:s="abab"输出:true解释:可由子串"ab"重复两次构成。示例2:输入:s="aba"输出:false示例3:输入:s="abcabcabcabc"输出:true解释:可由子串"abc"重复四次构成。......
  • Ubuntu22.04系统下安装配置rime五笔输入法
    1、安装 1.1 sudoaptinstallibus-rime 1.2 sudoaptinstalllibrime-data-wubi2、安装后重启系统,在设置-键盘-输入源 中添加汉语,再选择 中文Rime 3、配置第一步安装好后,默认的输入法是拼音输入法,还需要我们自己设置。打开设置的方法是先把输入法调到“中文(......
  • javascript判断字符串中是否包含某个字符串
    使用Math与RegExp结合Let gameName="AFGA捕鱼";if(gameName.match(RegExp("捕鱼"))){      letfishing=obj.data.gameData.fishing;      console.log(fishing);    }参考地址:https://www.php.cn/faq/473880.html......
  • 定时器之输入捕获
    同一个定时器,输入捕获和输出比较只能使用一个 检测到电平跳变,执行后面的动作。当前CNT的值,锁存到CCR寄存器中   高频使用测频法,低频使用测周法,分界值呢?使用中界频率区分 测频法实现逻辑:每来一个上升沿记一次X+=1,  使用定时器定时1S,到时间统计这个X值,就是频率,同......
  • 5.3 汇编语言:字符串操作指令
    本章将深入研究字符串操作指令,这些指令在汇编语言中具有重要作用,用于处理字符串数据。我们将重点介绍几个关键的字符串操作指令,并详细解释它们的功能和用法。通过清晰的操作示例和代码解析,读者将了解如何使用这些指令进行字符串比较、复制、填充等常见操作。我们还将探讨不同指令之......
  • 5.3 汇编语言:字符串操作指令
    本章将深入研究字符串操作指令,这些指令在汇编语言中具有重要作用,用于处理字符串数据。我们将重点介绍几个关键的字符串操作指令,并详细解释它们的功能和用法。通过清晰的操作示例和代码解析,读者将了解如何使用这些指令进行字符串比较、复制、填充等常见操作。我们还将探讨不同指令......