iOS 输入框如何限制字符长度和emoji

作者&投稿:胥莉 (若有异议请与网页底部的电邮联系)
~

我们经常会遇到这样的需求,比如手机输入框限制 11 位数字,个人简介最多不超过英文最多 100 个字,中文最多 50 个字,个人昵称不能使用 emoji 表情等等。

在上一篇文章了解了编码的基础上,我们来看下如何解决这些需求问题。

我们可以知道 emoji 表情其实是由一个或多个 Unicode 编码点组成的字符串,而且 emoji 表情对应这一定的码元范围。

因此这里如果要判断一个字符串里面是否包含 emoji 表情,就要解决两个问题:

在iOS中 NSString 可以通过 enumerateSubstringsInRange:options:usingBlock: 方法。这个方法把 Unicode 抽象的地方隐藏了,能让你更轻松的循环字符串里面的组合字符串,单词,行,句子,段落。

你甚至可以加上 NSStringEnumerationLocalized 这个选项,这样可以在确定词语间和句子间的边界时把用户所在区域考虑进去。要遍历单个字符,可以将参数指定为 NSStringEnumerationByComposedCharacterSequences 按字符顺序,依次遍历出相关子字符串。

这里表明了苹果想让我们把字符串看做子字符串的集合,因为:
1.单个 unichar 太小,不足以代表一个真正的 Unicode 字符。
2.一些字符由多个 unicode 码点组成。

emoji 表情对应着一定的码元范围,因此可以通过的判断字符的 unicode 编码来判断改字符是否为 emoji 编码。

但这里有个问题,就是 emoji 对应的码元范围会随着系统版本的而改变,因为每次版本更新可能会添加新的 emoji 表情,因此这个判断方法,需要一直更新,那有没有一种好的方法可以长期有效判断呢。

在我们长期的印象中, emoji 表情都是带有色彩的,苹果键盘自带的 emoji 表情,从现在看来一直都是带有色彩的,而常规的文本一般都是黑色的,因此这里可以有如下解决方案:

具体实现如下:

当然这个方法只适合对少量的字符串,因为如果字符串比较长,利用该方法进行解析判断会耗费 CPU 资源。

因此我们可以结合上面的 emoji 对应的码元范围和下面是否包含颜色来判断,对应字符串是否包含 emoji 表情,这样准确性会高点,但对于一些第三方的键盘如搜狗输入法里面的一些表情,还是不能很好过滤。

如果是 swift 语言,因为 Swift 5.0 ,它带有一个新的 Unicode.Scalar.Properties 类,我们可以利用这个类的方法,向 Character 和 String 类添加一些帮助属性。这里会:

同样 swift 上的该方法对于第三方键盘上的部分表情判断也没办法做到百分百准确。

比如一段个人简介中经常是禁止输入表情,但允许输入中英文,如果中文要算 2 个字符,英文算 1 个字符,如何准确的算出,该字符串的长度。

因为这里的汉字算 2 个字节,英文算 1 个字节,因此应该使用 GB_18030_2000 编码来计算字符串的长度。

GB_18030_2000 主要有以下特点:

GB_18030_2000 编码:

我们常用的汉字是 3500 个,都包含在双字节部分,因此使用 GB_18030_2000 来计算字符串长度可以完美的解决我们的需求。

基于以上的知识,我写了一个输入框拦截器 FJFTextInputIntercepter ,该拦截器可以通过设置对应的参数来对输入框的输入进行限制:

这里我用了两种方式来写这个拦截器:

Unicode与JavaScript详解
从Emoji的限制到Unicode编码




莱州市13093802779: 如何限制html标签input的长度? -
卓家治糜: 1、限制input文本框的输入长度的话可以为其加上maxlength属性来限制.如果是限制input的显示长度的话,可以直接用CSS中的width来限制. 2、添加css属性, style="width:200px;".3、 限制input标签的长度: . 4、只有maxlength属性是限制输入长度的,当输入字符长度(数量)达到maxlength的值时,不能再输入了(输入的字符不被接受). 5、其他的size和style限制的是输入框显示长度,但是不限制输入长度,一直可以输入字符,,当输入的字符长度(数量)超过超过允许显示的长度时,超出部分会被输入框遮盖,而不是截断,你可以按左右键(← →)来滚动查看被遮盖部分的字符串.

莱州市13093802779: 怎么限制input只能输入数字 -
卓家治糜: 思路:输入框设置onKeydown事件.当键盘上按下一个键,马上获取该值.用正则表达式验证该值是否为数字.为数字就通过.非数字的话.获取该输入框的字符串长度.用substring(0,input.length-1)剪切字符串.也就是非数字的时候.输入框长度-1.限制输入.

莱州市13093802779: iOS 如何限制文本框内不能输入特殊字符 -
卓家治糜: NSString *emailRegex = @"[A-Z0-9a-z]"; 正则表达式.

莱州市13093802779: ios 怎么设置cell中的输入框只能输入数字 -
卓家治糜: 只能输入数字:android:inputType="number" 数据范围只能通过代码来判断,可以设置输入的长度:android:maxEms="8"

莱州市13093802779: ios中怎样限制textfield只能输入字母和数字 -
卓家治糜: //设置键盘类型 self.textField.keyboardType = UIKeyboardTypeASCIICapable; define kAlphaNum @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"//判断是否是数字,不是的话就输入失败- (BOOL)...

莱州市13093802779: 如何限制文本框输入长度 -
卓家治糜: 1、JS/jQuery限制文本框长度$("#id").onkeyup(function(){ //方法可以使用其他(onkeydown/onblur等) if($("#id").val().length>10){ //长度可自定义 //超出长度,自行处理 }else{ //未超出…… } });2、设置文本框属性MaxLenth MaxLenth=10;3、根据编程语言限制长度 根据编程语言,应用与文本框输入相关事件,或提交事件发生时,获取文本框的内容,然后进行长度验证

莱州市13093802779: 怎么限制 UITextField 输入长度 -
卓家治糜: 要限制一个UITextField的输入字数(参考链接),首先想到的应该是通过 UITextFieldDelegate 的代理方法来限制:- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)...

莱州市13093802779: input输入框内字符数不能超过12个,求教该怎么改呢? -
卓家治糜: 通过如下的js语句可以确定文本框值的字符长度:<br>document.getelementbyid('input_id').value.length<br>比如下面的例子:<br><input type="text" value="123" onblur="javascript:alert(this.value.length);" /><br>如果还有问题欢迎追问,问题解决请及时选为满意回答,谢谢.

莱州市13093802779: 如何控制TextBox的最打输入字符的长度 -
卓家治糜: 将TextBox 的 MaxLength 属性设置为3,这样就可以现在textbox长度为3,只能输入3个字符,从而起到限制文本框输入长度.

莱州市13093802779: 怎么设定一个input输入框的长度 -
卓家治糜: 属性 size 按可见字符数设置宽度 属性 maxlength 规定最大可输入字符数 要保持整体美观,可用 css.标签用于搜集用户信息.根据不同的 type 属性值,输入字段拥有很多种形式.输入字段可以是文本字段、复选框、掩码后的文本控件、单选按钮、按钮等等.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网