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

Javascript 正则表达式:删除前导零,但保留单个零,javascript,regex,Javascript,Regex,我有一个输入字段,它绑定了一个格式化函数,每当字段失去焦点时就会触发该函数 我的目标是从一个输入中删除所有的前导零,我用下面的一行实现了这一点。但是,当用户想要输入单个0或类似0000的值时,我仍然希望该字段以值0(单个)结尾。使用.replace(/^0+/,“”)它将删除每个零并返回一个空字符串。有人知道什么regex可以处理这个 const formatNumber = ($field) => { var number = $field.val().replace(/\./g, ''

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

我的目标是从一个输入中删除所有的前导零,我用下面的一行实现了这一点。但是,当用户想要输入单个0或类似0000的值时,我仍然希望该字段以值0(单个)结尾。使用
.replace(/^0+/,“”)
它将删除每个零并返回一个空字符串。有人知道什么regex可以处理这个

const formatNumber = ($field) => {
var number = $field.val().replace(/\./g, '').replace(/\s/g, '').replace(/^0+/, '');
return number;
};
注意
如果(number==“”)number=“0”
不是选项


edit1::我注意到这里似乎有点混乱。e、 g“0009825”需要变成9825,而不是09825。我只想在值仅为零时预先输入0。

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

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

正则表达式详细信息:

  • ^
    :开始
  • (?:
    :启动捕获组
    • 0+(?=[1-9])
      :匹配必须后跟
      1-9
    • |
      :或
    • 0+(?=0$)
      :匹配一个或多个必须后跟一个
      0
      并结束的零
  • :结束捕获组
替换为空字符串,如果字符串中只有零,则将保留单个
0
,否则将删除前导零


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

str = str.replace(/^0+(0$|[1-9])/mg, '$1');
具有前导零且与捕获组中的一个数字匹配的

const cleanZeros=str=>str.replace(/^0+(\d)/,“$1”)
var测试=[“0009876”、“0”、“0000”、“9999”、“0090000”]

tests.forEach(s=>console.log(s,cleanzero))
使用
。替换(/^0{2,}/,“”)
。是否替换(/^0+/,“0”)
?如果要保留单个
0
,则不应将开头的所有1+零替换为空字符串,而应替换为单个
0
。还可以将其绑定到字符串的结尾。我不确定这是否可行,因为我不是一名javascript开发人员,但在这里,您可以匹配所有领先的Zeor和以下任何数字字符串。现在,第二个组将匹配单个零或任何其他数字,然后使用第二个组覆盖字符串
.replace(/^(0+)(\d+)$/,'\2')
@wiktor在“004560”的情况下,我不希望预先为零。仅当输入的值为0或多个零时。然后添加
$
/^0+$/
,告诉正则表达式仅匹配1+零字符串