input和React-Native的TextInput的输入限制,只能输入两位小数(阻止0开头的输入),类似价格限制
一、背景:
想要实现一功能:
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开头的输入),类似价格限制的更多相关文章
- React Native之TextInput的介绍与使用(富文本封装与使用实例,常用输入框封装与使用实例)
React Native之TextInput的介绍与使用(富文本封装与使用实例,常用输入框封装与使用实例) TextInput组件介绍 TextInput是一个允许用户在应用中通过键盘输入文本的基本组 ...
- JS限制input输入的为数字并且有小数的时候最多保留两位小数
JS限制input用户输入的为数字并且有小数的时候最多保留两位小数,代码如下: html部分: <input type="number" onkeypress="r ...
- 控制input只能输入数字和两位小数
<input type="text" name="je" onkeyup="clearNoNum(this)" /> funct ...
- jquery控制input只能输入数字和两位小数
jquery代码 function num(obj){ obj.value = obj.value.replace(/[^\d.]/g,""); //清除"数字" ...
- 【前端开发】限制input输入保留两位小数
<input type="text" name='amount' id="cash_num" placeholder="请输入金额" ...
- input只能输入数字或两位小数
/** * [只能输入数字和两位小数] * 举例:<input type="text" onkeyup="num(this)" size="10 ...
- js限制输入数字能输入小数点,js定义数组,js往数组中添加数据,js将字符型转为数字型,除法结果保留两位小数——js小测:计算比赛得分
一个朋友跟我说要去给某个比赛算分: 规则:去掉最低分最高分求平均分: 最近在学习大数据可视化——图谱,用到js一些东西,所以今天就用js练练 用到知识点: js限制输入数字能输入小数点,js定义数组, ...
- js 保留两位小数 input要求是数字框,
要求:input文本框只能输入数字,且只保留两位小数 问题:若设置input的 type="number" ,js处理部分若用到parseFloat方法处理,结果是string类 ...
- Android限定EditText的输入类型为数字或者英文(包括大小写),EditText,TextView只能输入两位小数
Android限定EditText的输入类型为数字或者英文(包括大小写) // 监听密码输入框的输入内容类型,不可以输入中文 TextWatcher mTextWatcher = new Tex ...
随机推荐
- Alpha阶段第1周Scrum立会报告+燃尽图 05
作业要求与https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246相同 一.小组介绍 组长:刘莹莹 组员:朱珅莹 孙韦男 祝玮琦 王玉潘 周 ...
- js设计模式整理
单例模式 恶汉式单例 实例化时 懒汉式单例 调用时构造函数模式 1.实现一 function Car(model, year, miles) { this.model = model; this.ye ...
- ConcurrentHashMap 分析
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/76795383 构造函数 JDK 1.5 引入了 ConcurrentHashMap . ...
- 深度学习(七十一)darknet 源码阅读
深度学习(七十一)darknet 源码阅读
- 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
本篇博客比较了常见的5种开源协议的异同,大家在为自己的代码选择协议的时候可以参考.现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种(http ...
- Java第五次作业--面向对象高级特性(抽象类和接口)
一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握抽象类的设计 掌握接口的设计 理解简单工厂设计模式 理解抽象类和接口的区别 掌握包装类的应用 掌握对象的比较方法和比较器的使用 学习使用日期操 ...
- BZOJ3297: [USACO2011 Open]forgot(背包)
3297: [USACO2011 Open]forgot Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 189 Solved: 126[Submit ...
- Linux交叉编译工具链和模块编译
所有的工具: aarch64-poky-linux-addr2line aarch64-poky-linux-c++filt aarch64-poky-linux-g++ aarch64-poky-l ...
- mysql表复制create table like和create table as比较
CREATE TABLE A LIKE B 此种方式在将表B复制到A时候会将表B完整的字段结构和索引复制到表A中来. CREATE TABLE A AS SELECT x,x,x,xx FROM B ...
- 洛谷2473(SCOI2008)奖励关
题目:https://www.luogu.org/problemnew/show/P2473 因为可不可选此物与之前选过什么物品有关,所以状态可以记录成前面已经选过什么物品. 因为选不选此物与它带来的 ...