一、背景:

想要实现一功能:

  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. Git 之 git原理简介

    这里只是很简单.超简单的介绍下git,为的是方便记忆: 本地仓库分为三个部分:工作区.暂存区.仓库区,其中暂存区和仓库区属于版本区. 对于文件的操作,需要从工作区----> 暂存区 ----&g ...

  2. fullfile

    这个我总是忽略,见过也不少了,顺便写写,其实一些命令很方便的. 一个例子: root_dir = '../mcg/pre-trained'; addpath(root_dir); addpath(fu ...

  3. ZetCode PyQt4 tutorial custom widget

    #!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PyQt4 tutorial In this example, ...

  4. springboot将项目打成war包

    1. 将项目的打包方式改为war包 <groupId>com.cc</groupId> <artifactId>aaaaaa</artifactId> ...

  5. LG2052 [NOI2011]道路修建

    题意 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1 条双向道路. 每条道路的 ...

  6. web程序1

  7. Brackets编辑器使用

    常用快捷操作 Ctrl + b 当选中一个文本时,离该文本最近的相同的文本会被高亮显示,这样,相同的2个文本就全部获得了焦点,可以同时更改高亮文本.(对,只会找寻最近的且只找到一个就不找了!惰性查找. ...

  8. 删除TFS项目上的文件

    1.用vs(版本)开发人员命令提示输入命令进行删除 1.

  9. bzoj3802: Vocabulary

    Description 给你三个字符串,这些字符串有些单词模糊不可认了,用"?"来代表. 现在你可以用任意英文小写字母来代表它们.要求是使得给定的三个字符串中 所有的"? ...

  10. HDU 4586 Play the Dice(数学期望)

    Play the Dice Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...