[英]Regex to match if string contains integer/decimal with digits
我想寫一個正則表達式,它允許一個整數或帶有0-2個十進制數字的十進制數字。
有效輸入
1
1.
1.1
1.11
111111111
111111111.
111111111.1
111111111.11
輸入無效
a
a.
1.a
1.111
1.1111
這是我想出的正則表達式
\d*\.?([\d]){0,2}
我無法對其進行測試以確保其正常工作。 我發現了幾種測試方法。 使用我剛才在這里使用w3schools設置的test
方法。 另一種方法是使用某些javascript正則表達式測試器,例如regexr和regex101 。 對於所有這些情況:看來我的正則表達式返回了誤報,或者我的正則表達式無法正常工作。
問題 :什么正則表達式可以做我想要做的事情?
^...$
檢查完整的字符串(從第一個字符到最后一個字符) ^...$
+
而不是*
)。 檢查以下示例:
r = /^\\d+\\.?\\d{0,2}$/ tests = ['1', '1.', '1.1', '1.11', '111111111', '111111111.', '111111111.1', '111111111.11', 'a', 'a.', '1.a', '1.111', '1.1111'] tests.forEach(function(val) { console.log(val, val.match(r) ? ': valid' : ': invalid'); });
在注釋之后-如果您需要“整數或具有0-2個十進制數字的十進制數字”的解決方案(就像您在問題中說的那樣,但不喜歡有效的輸入部分),則可以使用以下方法:
r = /^\\d+(\\.\\d\\d{0,1})?$/ console.log('1.'.match(r)) tests = ['1', '1.', '1.1', '1.11', '111111111', '111111111.', '111111111.1', '111111111.11', 'a', 'a.', '1.a', '1.111', '1.1111'] tests.forEach(function(val) { console.log(val, val.match(r) ? ': valid' : ': invalid'); });
不要忘了在正則表達式中關閉和打開,許多新的正則表達式都得到了它,並且它們最終導致不必要的結果,所有內容都應介於^和$之間,^是字(數字)邊界的起點,而$是終點...如下所示應該可以幫助您,請嘗試:
'use strict';
var decimal = /^\d+(\.\d\d{0,2})$/, num = 111111111.11;
console.log(decimal.test(num));
希望這可以幫助...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.