求个金额的正则表达式
- 可以是整数
- 如果是小数,最多保留两位(可以只有一位小数)
- 金额小数不能是
0.00
或者0.0
- 金额要大于0
写了好久没写出来,求大佬们赐教。。。
例子?:
1 true
1.0 true
1.00 true
0.1 true
0.01 true
0 false
0.0 false
0.00 false
1.001 false
回答:
正则
/^(?=.*[1-9])(?!0\d)\d+(\.\d{1,2})?$/
Test
[
'0',
'0.0',
'0.00',
'1',
'1.00',
'1.0',
'0.01'
]
.forEach(text => {
console.log(`text=${text}\t\t${regExp.test(text)}`)
})
解析
/^(?=.*[1-9])(?!0\d)\d+(\.\d{1,2})?$/
\d+(\.\d{1,2})?
: 比较直观,即匹配最多两位小数的数字字符串;(?!0\d)
: 要求字符整数部分不能以0
开头;(?=.*[1-9])
:要求字符串必须含有1-9
,即实现“金额要大于0”。
了解正则位置匹配相关知识可以参考GitHub笔记RegExp
回答:
^[1-9]{1,2}$|^0\.\d{1,2}$|^[1-9]\d{1,2}\.\d{1,2}$
Re TEST
回答:
var reg = /^(?!0+\.0+$)\d+(\.\d{1,2})?$/ var arr = [
'0',
'0.0',
'0.00',
'1',
'1.00',
'1.0',
'0.01',
]
const d = arr.map(item => reg.test(item));
console.log(d)
回答:
必须是非负数字,不能是单独的0,如果整数位位数大于1的话,那么第一位不能为0,最后小数点位数小于等于2,且最后一位不能为0
/^(?!0(\d|$))\d+?(\.\d?[1-9])?$/
['-1', '0', '0.01', '0.10', '0.101', '1', '01', '10', '10.', '10.1', '10.10'].map(str => { return /^(?!0(\d|$))\d+?(\.\d?[1-9])?$/.test(str)
})
// [false, false, true, false, false, true, false, true, false, true, false]
再给你补两个
1、/^(?!0+(\.0+)?$)\d+?(\.\d{1,2})?$/
必须是非负数字,不能是任何形式的0
['-1', '0', '0.00', '0.01', '0.10', '0.101', '1', '01', '10', '10.', '10.1', '10.10'].map(str => { return /^(?!0+(\.0+)?$)\d+?(\.\d{1,2})?$/.test(str)
})
// [false, false, false, true, true, false, true, true, true, false, true, true]
2、/^(?!0\d*(\.0+)?$)\d+?(\.\d{1,2})?$/
必须是非负数字,不能是任何形式的0,如果整数位位数大于1的话,那么第一位不能为0
['-1', '0', '0.00', '0.01', '0.10', '0.101', '1', '01', '10', '10.', '10.1', '10.10'].map(str => { return /^(?!0\d*(\.0+)?$)\d+?(\.\d{1,2})?$/.test(str)
})
// [false, false, false, true, true, false, true, false, true, false, true, true]
回答:
/^([1-9][0-9]{0,}(\.[0-9][0-9]?)?)$|^(0\.[0-9]?[1-9])$/
你们搞这么复杂吗,这个正则基本够用。
以上是 求个金额的正则表达式 的全部内容, 来源链接: utcz.com/p/938067.html