jsp中正则input只能输入数字,且保留两位小数

jsp中正则input只能输入正数,且保留两位小数


<form:input path="budget" htmlEscape="false" maxlength="10" class="input" onkeyup="this.value=this.value.replace(/[^\d.]/g, '').replace(/\.{2,}/g, '.').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.').replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3').replace(/^\./g, '')"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/\D/g,'')/>  
 //onbeforepaste表示在用户执行粘贴动作之前,在剪贴板内进行正则

分析一下这个正则写法:

1、关于正则:

^表示开始
$表示匹配结束
表示多个数字 匹配0次或多次
+表示匹配1一次或多次
?前的数值表示0-1次
. 表示除换行符以外的所有字符。
() 是为了提取匹配字符串的,表达式中有几个()就有几个相应的匹配字符串
[] 是定义匹配的字符范围
{n}表示非负整数, {}一般是用来匹配的长度,比如A{3}表示匹配三个A,B{1,3}表示匹配1到3个B
{N} - 匹配 N次。
{N,} - 匹配 N次以上。
{M,N} - 最少 M 次,最多 N 次匹配
[-]表示转义 *表示匹配
字符,同理.表示匹配.字符,-表示匹配-字符 ^表示匹配^字符
\d表示数字

2、分析我们的写法拆解:

value.replace(/[^\d.]/g, '')
.replace(/\.{2,}/g, '.')
.replace('.', '$#$')
.replace(/\./g, '')
.replace('$#$', '.')
.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')
.replace(/^\./g, '')

//拆解分析:
()表示匹配字符串
[]表示自定义字符范围
{}表示数量
加上^表示只算开头的
注意replace前一个参数,表示要替换的表达式内存在匹配replace前一个参数的值,才能发生替换,不然返回原值
.replace(/[^\d.]/g, '') 第一节拆解,只能获取到数字小数点:\d数字.小数点
.replace(/\.{2,}/g, '.') 第二节再次替换表示在第一节的基础上 将两个.及两个以上的.替换为一个.
.replace('.', '$#$') 第三节将匹配到的第一个.替换为$#$
.replace(/\./g, '') 第四节 将所有的.去掉,也就是除了第一个.其余的全部去掉
.replace('$#$', '.') 第五节 将之前替换的第一个$#$ 替换还原为.
.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3') 第六节 其中$1,$2,$3分别表示第一个括号,第二个括号,第三个括号中匹配的结果  (\-)* 表示存在0或者多个-(\d+) 表示1个或者1+的数字,当存在\.时表示当为小数时候,只匹配小数点后的两个数字,也就是保留两位小数(\d\d)
.$表示在两位小数后存在多个除了换行符以外的字符,使其能在特殊输入时也能匹配成功
最后的$1,$2,$3将获取到的值组合我们需要拿到的值
replace(/^\./g, '') 表示,如果开始就为.则将开头的.去掉

根据需要将其做稍作修改,可以得获取可以负数的input
value.replace(/[^\d.-]/g, '')
.replace(/\.{2,}/g, '.')
.replace(/^\-/,'$%$')
.replace(/\-/g,'')
.replace('$%$','-')
.replace('.', '$#$')
.replace(/\./g, '')
.replace('$#$', '.')
.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')
.replace(/^\-\./g, '-')
.replace(/^\./g, '')
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值