求个金额的正则表达式

  1. 可以是整数
  2. 如果是小数,最多保留两位(可以只有一位小数)
  3. 金额小数不能是0.00或者0.0
  4. 金额要大于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

阅读 7.8k
5 个回答
  1. 正则

    /^(?=.*[1-9])(?!0\d)\d+(\.\d{1,2})?$/
  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)}`)
    })
  3. 解析/^(?=.*[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])$/

你们搞这么复杂吗,这个正则基本够用。

image.png

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题