正则表达式:删除前导零,但保留单个零

til*_*lly 4 javascript regex

我有一个输入字段,我在其中绑定了一个格式化函数,每当该字段失去焦点时就会触发该函数。

我的目标是从输入中删除所有前导零,并且我确实通过以下行实现了这一点。但是,当用户想要输入单个 0 或类似 0000 的内容时,我仍然希望该字段以值 0(单个)结尾。它将.replace(/^0+/, '')删除所有零并仅返回一个空字符串。有人知道什么正则表达式可以处理这个问题吗?

const formatNumber = ($field) => {
var number = $field.val().replace(/\./g, '').replace(/\s/g, '').replace(/^0+/, '');
return number;
};
Run Code Online (Sandbox Code Playgroud)

注意if(number === "") number = "0"不是一个选项。

edit1: : 我注意到似乎有点混乱。例如“0009825”需要变成9825而不是09825。我想要前面的0的唯一情况是当值只是零时。

anu*_*ava 9

您可以使用此正则表达式替换:

.replace(/^(?:0+(?=[1-9])|0+(?=0$))/mg, '')
Run Code Online (Sandbox Code Playgroud)

正则表达式演示

正则表达式详细信息:

  • ^: 开始
  • (?::开始捕获组
    • 0+(?=[1-9]):匹配 1 个或多个零,后面必须有1-9
    • |: 或者
    • 0+(?=0$):匹配 1 个或多个零,后面必须跟有 10并结束
  • ):结束捕获组

0替换为空字符串,如果字符串中只有零,则将保留单个字符串,否则将删除前导零。


使用捕获组的替代解决方案:

str = str.replace(/^0+(0$|[1-9])/mg, '$1');
Run Code Online (Sandbox Code Playgroud)


epa*_*llo 5

带有前导零的简单正则表达式并匹配捕获组中的一位数字

const cleanZeros = str => str.replace(/^0+(\d)/, '$1')


var tests = ["0009876","0", "0000", "9999", "0090000"]
tests.forEach( s => console.log(s, cleanZeros(s)))
Run Code Online (Sandbox Code Playgroud)