簡體   English   中英

刪除任何非數字並檢查格式是否為有效數字

[英]Remove Any Non-Digit And Check if Formatted as Valid Number

我試圖找出一個允許字符串的正則表達式模式,但刪除任何不是數字的東西,a . ,或領先-

我正在尋找從字符串中刪除任何非“數字”變量的最簡單方法。 此解決方案不一定是正則表達式。

這意味着它應該轉向

1.203.00 -> 1.20300
-1.203.00 -> -1.20300
-1.-1 -> -1.1
.1 -> .1
3.h3 -> 3.3
4h.34 -> 4.34
44 -> 44
4h -> 4

規則是第一個句點是小數點,后面的每一個都應該刪除。 字符串中應該只有一個減號,它應該在前面。

我當時認為應該有一個正則表達式,但我無法繞過它。 我發現的大多數正則表達式解決方案允許第二個小數點保持不變。

您可以使用此替換方法:

  • 在第一次replace我們刪除所有非數字和非DOT字符。 唯一的例外是使用前瞻我們否定的第一個連字符。
  • 在第二次使用回調replace ,我們將在第一次DOT后刪除所有DOT。

代碼和演示:

 var nums = ['..1', '1..1', '1.203.00', '-1.203.00', '-1.-1', '.1', '3.h3', '4h.34', '4.34', '44', '4h' ] document.writeln("<pre>") for (i = 0; i < nums.length; i++) document.writeln(nums[i] + " => " + nums[i].replace(/(?!^-)[^\\d.]+/g, ""). replace(/^(-?\\d*\\.\\d*)([\\d.]+)$/, function($0, $1, $2) { return $1 + $2.replace(/[.]+/g, ''); })) document.writeln("</pre>") 

我可以通過正則表達式搜索和替換來實現。 num是傳入的字符串。

num.replace(/[^\d\-\.]/g, '').replace(/(.)-/g, '$1').replace(/\.(\d*\.)*/, function(s) {
  return '.' + s.replace(/\./g, '');
});

一種非正則表達式解決方案,實現了一個簡單的單遍解析器。 使用ES5 Array功能是因為我喜歡它們,但是對於for循環也能正常工作。

 function generousParse(input) { var sign = false, point = false; return input.split('').filter(function(char) { if (char.match(/[0-9]/)) { return sign = true; } else if (!sign && char === '-') { return sign = true; } else if (!point && char === '.') { return point = sign = true; } else { return false; } }).join(''); } var inputs = ['1.203.00', '-1.203.00', '-1.-1', '.1', '3.h3', '4h.34', '4.34', '4h.-34', '44', '4h', '.-1', '1..1']; console.log(inputs.map(generousParse)); 

是的,它比多個正則表達式替換更長,但它更容易理解並且看到它是正確的。

好的弱嘗試但看起來很好..

 var r = /^-?\\.?\\d+\\.?|(?=[az]).*|\\d+/g, str = "1.203.00\\n-1.203.00\\n-1.-1\\n.1\\n3.h3\\n4h.34\\n44\\n4h" sar = str.split("\\n").map(s=> s.match(r).join("").replace(/[az]/,"")); console.log(sar); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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