一、背景:

想要实现一功能:

  1. 最多只能输入两位小数,类似的价格限制

  2. 实时监听限制输入,禁止输入不符合规范的字符(当输入违禁字符,进行删除操作)

 这样做的优点:

  1. 在用户输入时直接进行限制,而不是在输入完才进行检测提示 --> 实时性

  2. 直接在输入时进行规范,用户体验更好

二、分析:

 1. 实现对输入数据的实时监控

  web一般使用 onkeyup、onpaste、oncontextmenu等事件来实时监听输入的字符变化

  具体请看这篇博客: input实时监听控制输入框的输入内容和长度,并进行提示和反馈

  react-native使用的TextInput,它自带的onChangeText的方法可以实现实时监听输入变化

 2. 需要使用正则表达式来实现字符的检测和替换

  检测是否是保留两位小数的字符格式(只能放在blur事件和react-native的TextInput的onEndEditing内使用,进行数据检测)

  reg = (([1-9]{1}\d*)|(0{1}))(\.\d{0,2})或者 /^(([1-9][0-9]*)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/

三、正文

newText = newText.replace(/^0+[0-9]+/g, "0"); //不能以0开头输入
newText = newText.replace(/[^\d.]/g,""); //清除"数字"和"."以外的字符
newText = newText.replace(/^\./g,""); //验证第一个字符是数字(即第一个字符非“.”)
newText = newText.replace(/\.{2,}/g,"."); //只保留第一个, 清除多余的
newText = newText.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
newText = newText.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3'); //只能输入两个小数
//React-Native中的使用
onChangeText={(text) => {
let newText = (text != '' && text.substr(0,1) == '.') ? '' : text;
newText = newText.replace(/^0+[0-9]+/g, "0"); //不能以0开头输入
newText = newText.replace(/[^\d.]/g,""); //清除"数字"和"."以外的字符
newText = newText.replace(/\.{2,}/g,"."); //只保留第一个, 清除多余的
newText = newText.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
newText = newText.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3'); //只能输入两个小数
this.setState({price: newText})
}
}

四、结语:

  结束!

input和React-Native的TextInput的输入限制,只能输入两位小数(阻止0开头的输入),类似价格限制的更多相关文章

  1. React Native之TextInput的介绍与使用(富文本封装与使用实例,常用输入框封装与使用实例)

    React Native之TextInput的介绍与使用(富文本封装与使用实例,常用输入框封装与使用实例) TextInput组件介绍 TextInput是一个允许用户在应用中通过键盘输入文本的基本组 ...

  2. JS限制input输入的为数字并且有小数的时候最多保留两位小数

    JS限制input用户输入的为数字并且有小数的时候最多保留两位小数,代码如下: html部分: <input type="number" onkeypress="r ...

  3. 控制input只能输入数字和两位小数

    <input type="text" name="je" onkeyup="clearNoNum(this)" /> funct ...

  4. jquery控制input只能输入数字和两位小数

    jquery代码 function num(obj){ obj.value = obj.value.replace(/[^\d.]/g,""); //清除"数字" ...

  5. 【前端开发】限制input输入保留两位小数

    <input type="text" name='amount' id="cash_num" placeholder="请输入金额" ...

  6. input只能输入数字或两位小数

    /** * [只能输入数字和两位小数] * 举例:<input type="text" onkeyup="num(this)" size="10 ...

  7. js限制输入数字能输入小数点,js定义数组,js往数组中添加数据,js将字符型转为数字型,除法结果保留两位小数——js小测:计算比赛得分

    一个朋友跟我说要去给某个比赛算分: 规则:去掉最低分最高分求平均分: 最近在学习大数据可视化——图谱,用到js一些东西,所以今天就用js练练 用到知识点: js限制输入数字能输入小数点,js定义数组, ...

  8. js 保留两位小数 input要求是数字框,

    要求:input文本框只能输入数字,且只保留两位小数 问题:若设置input的  type="number" ,js处理部分若用到parseFloat方法处理,结果是string类 ...

  9. Android限定EditText的输入类型为数字或者英文(包括大小写),EditText,TextView只能输入两位小数

    Android限定EditText的输入类型为数字或者英文(包括大小写) // 监听密码输入框的输入内容类型,不可以输入中文    TextWatcher mTextWatcher = new Tex ...

随机推荐

  1. 2019年微信小程序1月TOP100榜单

  2. LARC Caffe笔记(一) Setup

    采用杂记的形式 从查找到知乎页面开始:https://www.zhihu.com/question/27982282 到mnist example页面:http://caffe.berkeleyvis ...

  3. 判断对称二叉树 python代码

    对称二叉树的含义非常容易理解,左右子树关于根节点对称,具体来讲,对于一颗对称二叉树的每一颗子树,以穿过根节点的直线为对称轴,左边子树的左节点=右边子树的右节点,左边子树的右节点=左边子树的左节点.所以 ...

  4. nginx配置文件的性能优化

    1.nginx进程数,建议按照cpu数目来指定,一般跟cpu核数相同或为它的倍数.worker_processes 8; 2.为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或 ...

  5. 第十课 C++异常简介

    异常不是错误,异常是程序中可预料到的另一条执行分支,是可预见的.错误是不可预料的. C++内置了异常处理的语法元素try...catch...,如下: C++通过throw语句抛出异常信息: 上图中t ...

  6. scanf()与gets()的区别

    scanf()与gets()的区别 1.scanf()可以同时接受多个字符串,而gets()一次只能接受一个字符串. #include<stdio.h>int main(){ char s ...

  7. elasticsearch的插件安装

    目前使用的是2.4.5版本的es 安装的时候注意以下几点 : 1.如果想所有的ip都能访问es,需要修改config下的elasticsearch.yml.修改如下 network.host=0.0. ...

  8. udev学习笔记汇总

    1.什么是udev udev--就是动态设备管理 udev 能够处理设备事件.管理设备文件的权限.在/dev目录中创建额外的符号链接.重命名网络接口,等等. 内核通常仅根据设备被发现的先后顺序给设备文 ...

  9. 使用docker 部署graylog集群

    graylog 相比elk 有比较简单的方面,使用简单,配置简单,可视化工具是一体化的,比较方便 搭建使用docker,多主机部分,结合docker-compose 进行管理 具体docker 配置文 ...

  10. macOS -- Mac系统如何编辑hosts文件

    Hosts是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文 ...