我需要一個只接受從 1 到 9999.99 的整數或小數的正則運算式。我試過這個
^(?:[1-9][0-9]{0,4}(?:.d{1,2})?|9999|9999.99)$
但它也接受 10000。
uj5u.com熱心網友回復:
模式中有幾個問題:
- 這部分
[1-9][0-9]{0,4}可以匹配1-5個數字,因為量詞是0-4次所以它也可以匹配10000 - 你不需要,
9999|9999.99因為那些已經可以匹配1-9][0-9]{0,4} - 這部分
.d匹配除換行符后跟一個d字符之外的任何字符。您必須同時轉義以匹配字面上的點和單個數字 - 通過這些更改,您可以省略外部捕獲組
更新后的模式如下所示:
^[1-9]\d{0,3}(?:\.\d{1,2})?$
^字串的開始[1-9]\d{0,3}匹配單個數字 1-9 并將數字 0-9 重復 0 到 3 次(?:\.\d{1,2})?可選擇匹配 a.和 1 或 2 位數字$字串結束
正則運算式演示
uj5u.com熱心網友回復:
試試這個正則運算式:
^0*(?!\.\d )[1-9]\d{0,3}(?:\.\d{1,2})?$
演示
解釋:
^- 匹配字串的開頭0*- 匹配 0 次出現的數字0(?!\.\d )- 如果當前位置后面沒有 a.和 1 數字,則零長度匹配[1-9]- 匹配從 1 到 9 的數字\d{0,3}- 匹配至少 0 次或最多 3 次出現的數字(?:\.\d{1,2})?- 匹配小數.后跟 1 或 2 位數字。?末尾的A使小數部分可選$- 匹配字串的結尾
uj5u.com熱心網友回復:
另一個想法,但在性能方面沒有太大區別(只是為了好玩)。
^(?!0)\d{1,4}(?:\.\d\d?)?$
該looakhead (?!0)防止從零開始,所以我們可以進一步匹配\d{1,4}。
不尊重前導零。在 regex101 上查看此演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/398899.html
下一篇:匹配數字中特定模式以外的所有內容
