簡體   English   中英

正則表達式:刪除前導零,但保留單個零

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM