求个金额的正则表达式

  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


回答:

  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])$/

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

求个金额的正则表达式

求个金额的正则表达式

以上是 求个金额的正则表达式 的全部内容, 来源链接: utcz.com/p/938067.html

回到顶部