簡體   English   中英

如果字符串包含帶數字的整數/小數,則匹配正則表達式

[英]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
  • 字符串允許任意數量的數字字符,但僅允許1個小數/句號
  • 如果存在句點/小數:僅允許小數點后兩位數字

這是我想出的正則表達式

\d*\.?([\d]){0,2}

我無法對其進行測試以確保其正常工作。 我發現了幾種測試方法。 使用我剛才在這里使用w3schools設置test方法。 另一種方法是使用某些javascript正則表達式測試器,例如regexrregex101 對於所有這些情況:看來我的正則表達式返回了誤報,或者我的正則表達式無法正常工作。

問題 :什么正則表達式可以做我想要做的事情?

  1. 您需要確保使用^...$檢查完整的字符串(從第一個字符到最后一個字符) ^...$
  2. 第一位數字應至少出現1次(因此您要使用+而不是* )。

檢查以下示例:

 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.

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