![](/img/trans.png)
[英]Javascript: regex for positive and negative number but no decimal point
[英]Javascript regex positive negative decimal number
我需要一個正則表達式,它可以匹配正負十進制值、空字符串('')以及僅減號('-')。 由於我需要在處理數字字段更改的 function 中使用它,並且為了添加負值,用戶首先添加“-”或刪除舊值(“”),我需要匹配所有這 3 個條件。
所以,總而言之,正則表達式應該允許:
到目前為止,我所擁有的是:
function sanitizeInputValue(value: string) {
var re = new RegExp('^$|^-?\\d{1,9}(\\.\\d{1,2})?$');
return value.match(re) === null ? 0 : value;
}
在從 function 返回之前,使用 javascript 的內置Number
將字符串轉換為數值。
另外,我修改了您的正則表達式,以便它可以接受像.23
和0.2345
這樣的輸入。
function sanitizeInputValue(value) { var re = new RegExp('^$|^-?(\\d+)?(\\.?\\d*)?$'); return value.match(re) === null? 0: Number(value); } console.log(sanitizeInputValue("-23")); // -23 console.log(sanitizeInputValue("42.123")); // 42.123 console.log(sanitizeInputValue("-.34")); // -0.34 console.log(sanitizeInputValue("")); // 0 console.log(sanitizeInputValue("-8.")); // -8 console.log(sanitizeInputValue("-8.4")); // -8.4
您可以將帶有小數部分的數字匹配為可選,因此您也可以僅匹配連字符^$|^-?(?:\d{1,9}(\.\d{1,2})?)?$
由於所有部分都是可選的,因此您可以省略^$
,然后所有部分都是可選的。
^-?(?:\d{1,9}(?:\.\d{1,2})?)?$
解釋
^
字符串開頭-?
可選連字符(?:
非捕獲組
\d{1,9}
匹配一個數字 1-9 次(?:\.\d{1,2})?
可選擇匹配一個點和 1-2 位數字)?
關閉非捕獲組並將其設為可選$
字符串結束。 var re = new RegExp("^-?(?:\\d{1,9}(?:\\.\\d{1,2})?)?$"); [ "", "-", "1", "1.2", "test", "1234567890", "1.123", "-2", "-2.6" ].forEach(s => console.log(s + " --> " + re.test(s)));
編輯
因為您還想匹配-8.
並且不想限制位數,您可以使用:
^-?(?:\d+\.?\d*)?$
解釋
^
字符串開頭-?
可選-
(?:
非捕獲組
\d+\.?\d*
匹配 1+ 個數字、可選的點和 0+ 個數字)?
關閉組並使其可選$
字符串結尾 var re = new RegExp("^-?(?:\\d+\\.?\\d*)?$"); [ "-8.", "", "-", "1", "1.2", "test", "1234567890", "1.123", "-2", "-2.6" ].forEach(s => console.log(s + " --> " + re.test(s)) );
function sanitizeInputValue(value) {
var re = /^$|\-?[0-9]\d*(\.\d*)?|-/;
return value.match(re) ? value : 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.