iOStextFiled判断输入长度
个人在开发当中发现在用textField的代理方法
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if (textField.text.length > 5) {
textField.text = [textField.text substringToIndex:5];
return;
}
}
中判断长度大小时,键盘中联想出来的文字还是可以输入到textField中。
比如,你的限制是5,输入框已经是5个字了,联想的字是 ‘电话’还可以输入进去。
这个时候可以使用给textField加通知解决
[self.TextField addTarget:self action:@selector(addTextFieldEditChanged:) forControlEvents:UIControlEventEditingChanged];
在通知的方法中判断。
//长度判断
-(void)addSpecsTextFieldEditChanged:(UITextField *)textField{ NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 键盘输入模式
if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写 }
// 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
else{ if ([textField isEqual:self.countText] ) { if ([textField.text floatValue] > 999) { textField.text = [textField.text substringToIndex:4];
[self.toast makeToast:@"库存不能超过999!" duration:2.0 position:CSToastPositionCenter];
return;
}
}
}
if ([textField isEqual:self.specsText] ) { if (textField.text.length > 20) {
textField.text = [textField.text substringToIndex:20];
[self.toast makeToast:@"规格不能超过20位字符!" duration:2.0 position:CSToastPositionCenter];
return;
}
} UITextRange *selectedRange = [textField markedTextRange];
//获取高亮部分
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) { if ([textField isEqual:self.priceText] ) { if ([textField.text floatValue] >= 1000) { textField.text = [textField.text substringToIndex:5];
[self.toast makeToast:@"价格不能超过999.99!" duration:2.0 position:CSToastPositionCenter];
return;
}
}
if ([textField isEqual:self.unitText] ) {
if (textField.text.length > 4) {
textField.text = [textField.text substringToIndex:4];
[self.toast makeToast:@"单位不能超过4位字符!" duration:2.0 position:CSToastPositionCenter];
return;
}
} }
// 有高亮选择的字符串,则暂不对文字进行统计和限制
else{ }
}
//限制小数点
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ if ([ToolClass stringContainsEmoji:string]) { //过滤表情
return NO;
}
if (textField == self.priceText) {
if ([textField.text rangeOfString:@"."].location == NSNotFound) {
self.isHaveDian = NO;
}
if ([string length] > 0) { unichar single = [string characterAtIndex:0];//当前输入的字符
if ((single >= '0' && single <= '9') || single == '.') {//数据格式正确 //首字母不能为0和小数点
if([textField.text length] == 0){
if(single == '.') {
[textField.text stringByReplacingCharactersInRange:range withString:@""];
return NO;
} } //输入的字符是否是小数点
if (single == '.') {
if(!self.isHaveDian)//text中还没有小数点
{
self.isHaveDian = YES;
return YES; }else{
[textField.text stringByReplacingCharactersInRange:range withString:@""];
return NO;
}
}else{
if (self.isHaveDian) {//存在小数点 //判断小数点的位数
NSRange ran = [textField.text rangeOfString:@"."];
if (range.location - ran.location <= 2) {
return YES;
}else{ [self.toast makeToast:@"小数点后只能输入2位!" duration:2 position:CSToastPositionCenter];
return NO;
}
}else{
return YES;
}
}
}else{//输入的数据格式不正确 [textField.text stringByReplacingCharactersInRange:range withString:@""];
return NO;
}
}
else
{
return YES;
} }
return YES;
}
//过滤表情
+ (BOOL)stringContainsEmoji:(NSString *)string { __block BOOL returnValue = NO; [string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { const unichar hs = [substring characterAtIndex:0]; if (0xd800 <= hs && hs <= 0xdbff) { if (substring.length > 1) { const unichar ls = [substring characterAtIndex:1]; const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000; if (0x1d000 <= uc && uc <= 0x1f77f) { returnValue = YES; }else{ returnValue = YES; } } } else if (substring.length > 1) { const unichar ls = [substring characterAtIndex:1]; if (ls == 0x20e3) { returnValue = YES; }else{ returnValue = YES; } } else { if (0x2100 <= hs && hs <= 0x27ff) { if (10123 <= hs && hs <= 10130) { returnValue = NO; }else{ returnValue = YES; } } else if (0x2B05 <= hs && hs <= 0x2b07) { returnValue = YES; } else if (0x2934 <= hs && hs <= 0x2935) { returnValue = YES; } else if (0x3297 <= hs && hs <= 0x3299) { returnValue = YES; } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) { returnValue = YES; } } }]; return returnValue;
}
/**
*返回字符位数
*传进来字符串计算出字符串中总字符数,其中一个汉字表示2位字符,数字
*字母表示一位字符
*/
+ (NSInteger) computeStringCharCount:(NSString *)string{ NSInteger count = ; for (int i=; i < string.length; i++){
NSRange range = NSMakeRange(i, ); NSString *subString=[string substringWithRange:range];
const char *cString=[subString UTF8String];
if ([self stringContainsEmoji:string]) {
[SRMessage infoMessage:@"不能输入表情!"];
return count;
}
if (strlen(cString)==)
{
count = count + ;
}else if(strlen(cString)==)
{
count = count + ;
}
} return count;
}
iOStextFiled判断输入长度的更多相关文章
- 五、HTML判断输入长度,体会字体颜色变化
<!doctype html><html lang="en"> <head> <meta charset="UTF-8" ...
- textField 判断输入长度限制
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementS ...
- js判断输入字符串长度(汉字算两个字符,字母数字算一个)
js判断输入字符串长度(汉字算两个字符,字母数字算一个) 文本输入时,由于数据库表字段长度限制会导致提交失败,因此想到了此方法验证. 废话不多说上代码: <html> <head&g ...
- 编写Java程序,判断输入的三条长度的边,是否能构成三角形
需求说明: 编写Java程序,判断输入的三条长度的边,是否能构成三角形. (三角形第三边大于两边之和小于两边之差) 实现代码: package test; import java.util.Scann ...
- iOS- UITextField限制输入长度
限制输入长度的问题,在这里完美的解决了! //先创建一个textField 和 一个button. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
- Shell脚本中判断输入参数个数的方法投稿:junjie 字体:[增加 减小] 类型:转载
Shell脚本中判断输入参数个数的方法 投稿:junjie 字体:[增加 减小] 类型:转载 这篇文章主要介绍了Shell脚本中判断输入参数个数的方法,使用内置变量$#即可实现判断输入了多少个参数 ...
- linux脚本:shell, 判断输入参数的个数(命令行)
if [ $# != 3 ] ; thenecho "USAGE: $0 from to"echo " e.g.: $0 ~/oucaijun/from ~/oucaij ...
- 更好地限制一个UITextField的输入长度
要限制一个UITextField的输入字数,首先想到的应该是通过 UITextFieldDelegate 的代理方法来限制: - (BOOL)textField:(UITextField *)text ...
- javascript限定输入textarea输入长度
<textarea id="content" onkeyup="limitLength(this.value,'512','content')"> ...
随机推荐
- angular表单
angular的表单,点击确定进行创建,支持批量创建,表单验证有样式提醒; <!DOCTYPE html> <html lang="en"> <hea ...
- jQuery div内容间隔1秒动态向上滚动HTML、JS代码
demo1: <!DOCTYPE html> <html> <head> <title>div内容间隔1秒动态滚动</title> < ...
- git命令解析
一 常用命令 1..gitignore 文件为git忽略文件,例*.[oa] *.~ 为忽略.a或.o或.~结尾的文件./表示忽略目录,!表示反取, *表示匹配零个或者多个字符.?表示匹配一个字符. ...
- XML.01-语法简介
body,td { font-family: calibri; font-size: 10pt } XML.01-语法简介 文档声明 元素(标签) 属性 注释 特殊字符 CDATA区域 处理指令 ...
- 数据结构算法[c语言]
共16章,共四部分:基础知识,数据结构,排序和搜索. 所有的实现都是使用C语言缩写.任何语言都有优缺点,选用C语言是因为它使用的广泛. 第一章: 导论 第二章: 算法分析原理 第三章: 基本数据结构 ...
- hdu 3622 Bomb Game(二分+2-SAT)
Bomb Game Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hihoCoder #1199 : Tower Defense Game ——(树型dp)
题目链接:https://hihocoder.com/problemset/problem/1199. 题意:一棵以1为根的树,每个点有一个p值和q值,到这个点需要当前分数大于等于p,然后消耗掉(p- ...
- cf730e
一道数学题,这篇博客很好:http://blog.csdn.net/morejarphone/article/details/52926627(这样应该不算转载吧) 总结:做这类题目显然应该直接根据相 ...
- Ubuntu:我不小心把/var/lock文件夹给删了
在一个风和日丽的下午,不正常关闭minicom导致了device 没有正常解锁,于是使用minicom的时候提示 device is locked: 根据网上看到的方法只要把/var/lock 里面的 ...
- 从H264码流中获取视频宽高 (SPS帧) 升级篇
之前写过 <从H264码流中获取视频宽高 (SPS帧)> . 但发现很多局限性,而且有时解出来是错误的. 所以重新去研究了. 用了 官方提供的代码库来解析. 花了点时间,从代码库里单独把解 ...