簡體   English   中英

Javascript 正則表達式正負十進制數

[英]Javascript regex positive negative decimal number

我需要一個正則表達式,它可以匹配正負十進制值、空字符串('')以及僅減號('-')。 由於我需要在處理數字字段更改的 function 中使用它,並且為了添加負值,用戶首先添加“-”或刪除舊值(“”),我需要匹配所有這 3 個條件。

所以,總而言之,正則表達式應該允許:

  • 正負十進制值(也是 0)
  • ""(空字符串)
  • “-”(減號字符串)

到目前為止,我所擁有的是:

function sanitizeInputValue(value: string) {
  var re = new RegExp('^$|^-?\\d{1,9}(\\.\\d{1,2})?$');
  return value.match(re) === null ? 0 : value;
}

在從 function 返回之前,使用 javascript 的內置Number將字符串轉換為數值。

另外,我修改了您的正則表達式,以便它可以接受像.230.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.

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