input只能输入两位小数_Javascript - 限制非法的金额输入

2ae79f264bf12ef13f08e2974973a11e.png

某天闲来无事(项目有用到), 琢磨了一个正则用以限制金额的非法输入

先上本体:

const limitAmount = /([^0-9.])|((?<=d+.d{2})d+)|((?<=^0)0+)|(^0(?=[1-9]))|((?<=.d*).)|(^.)/g

// 主要用法, 把非法的金额字符输入替换为''
let amount = '001.11'
amount = amount.replace(limitAmount, '') // 1.11

实例代码:

<input type="text" id="amount" />
<script>
  const rLimitAmount = /([^0-9.])|((?<=d+.d{2})d+)|((?<=^0)0+)|(^0(?=[1-9]))|((?<=.d*).)|(^.)/g
  const $amount = document.querySelector('#amount')

  $amount.addEventListener('input', () => {
    $amount.value = $amount.value.replace(rLimitAmount, '')
  })
</script>

详细请见:

CodePen - javascript 限制非法的金额输入​codepen.io
这里要说明一下为什么不用 <input type="number" /> type="number"的输入框, 这样不就可以省略很多非法校验了嘛?

这个主要是因为 <input type="number" /> 的输入框, 当用户输入非法的number字符时, 获取到的value为空

正则说明:

接下来看看这段正则.

正则是通过多个'|'来组成

  • ([^0-9.]) // 限制非数字和小数点的输入
  • ((?<=d+.d{2})d+) // 限制小数点后两位之后的其它数字输入
  • ((?<=^0)0+) // 限制开始的多个0的输入
  • (^0(?=[1-9])) // 限制开头为0但并不是作为整数0的输入
  • ((?<=.d*).) // 限制多个'.'点的输入
  • (^.) // 限制开头的'.'号输入

并把按照容易触发的先后顺序排列

注意:

很多浏览器不支持逆向断言

0ff4bae97e11036b12664271770bb3f6.png
Can I use... Support tables for HTML5, CSS3, etc​caniuse.com

总结:

总的来说就是正则的运用, 包括: 正向肯定, 逆向肯定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值