![](/img/trans.png)
[英]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.