[英]What is the regex for decimals with or without leading zeros, and not one trailing zero?
[英]regex: remove leading zeros, but keep single zero
我有一个输入字段,我绑定了一个格式化函数,该函数在该字段失去焦点时触发。
我的目标是从输入中删除所有前导零,并且我确实使用以下行实现了这一点。 但是,当用户想要输入单个 0 或类似 0000 的内容时,我仍然希望该字段以值 0(单个)结尾。 使用.replace(/^0+/, '')
它将删除每个零并只返回一个空字符串。 有人知道什么正则表达式可以处理这个吗?
const formatNumber = ($field) => {
var number = $field.val().replace(/\./g, '').replace(/\s/g, '').replace(/^0+/, '');
return number;
};
注意: if(number === "") number = "0"
不是一个选项。
编辑1::我注意到似乎有点混乱。 例如,“0009825”需要变为 9825 而不是 09825。唯一需要预先设置为 0 的情况是该值为零。
您可以使用此正则表达式替换:
.replace(/^(?:0+(?=[1-9])|0+(?=0$))/mg, '')
正则表达式详情:
^
: 开始(?:
: 开始捕获组
0+(?=[1-9])
:匹配 1 个或多个必须后跟1-9
零|
: 或者0+(?=0$)
:匹配 1 个或多个必须后跟一个0
并结束的零)
: 结束捕获组替换是空字符串,如果字符串中只有零,则将留下单个0
,否则将删除前导零。
使用捕获组的替代解决方案:
str = str.replace(/^0+(0$|[1-9])/mg, '$1');
带有前导零并匹配捕获组中的一位数字的简单正则表达式
const cleanZeros = str => str.replace(/^0+(\\d)/, '$1') var tests = ["0009876","0", "0000", "9999", "0090000"] tests.forEach( s => console.log(s, cleanZeros(s)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.