我在輸入時遇到正則運算式問題 這是要求:限制 10 個字符(數字),包括點,并且只允許 1 個點 我當前的代碼在點前后只有 10 個字符。
^[0-9]{1,10}\.?[0-9]{0,10}$
感謝支持。
uj5u.com熱心網友回復:
小數點使大多數單一模式方法變得棘手。我可能會在這里使用替代方法:
^(?:\d{1,10}|(?=\d*\.)(?!\d*\.\d*\.)[0-9.]{2,11})$
這個模式說要匹配:
^ from the start of the number
(?:
\d{1,10} a pure 1 to 10 digit integer
| OR
(?=\d*\.) assert that one dot is present
(?!\d*\.\d*\.) assert that ONLY one dot is present
[0-9.]{2,11} match a 1 to 10 digit float
)
$ end of the number
uj5u.com熱心網友回復:
您可以使用前瞻來實作您的目標。
首先,查看您的正則運算式,您曾經[0-9]表示所有數字字符。我們可以將其縮短為\d,這意味著同樣的事情。
然后,我們可以專注于只有一個點的要求。我們可以使用以下模式對此進行測驗:
^\d*\.?\d*$
\d*表示任意數量的數字字符\.?匹配一個文字點,可選\d*匹配點后任意數量的數字字符$將其錨定到字串的末尾,因此匹配不能在第二個點之前結束,如果有第二個點,它實際上必須失敗
現在,我們實際上不想消耗此匹配中涉及的所有字符,因為那樣我們將無法確保有 <=10 個字符。這就是前瞻的用武之地:我們可以使用前瞻來確保上面的模式匹配,但實際上并不執行匹配。這樣我們驗證只有一個點,但我們實際上還沒有消耗任何輸入字符。前瞻看起來像這樣:
^(?=\d*\.?\d*$)
接下來,我們可以確保總共不超過 10 個字符。由于我們已經確定只有點和數字具有上述模式,為了簡單起見,我們最多可以匹配 10 個任何字符,如下所示:
^.{1,10}$
將這兩種模式放在一起,我們得到:
^(?=\d*\.?\d*$).{1,10}$
這將僅匹配具有 10 個或更少字符且不超過一個點的數字輸入。
如果您想確保當有一個點時,也有一個數字伴隨它,我們可以通過添加另一個前瞻來實作這一點。滿足此條件的唯一情況是輸入字串只是一個點 ( .) 時,因此我們可以使用否定前瞻明確地排除這種情況,如下所示:
(?!\.$)
將其重新添加到我們的主運算式中,我們得到:
^(?=\d*\.?\d*$)(?!\.$).{1,10}$
uj5u.com熱心網友回復:
您可以斷言字串中的 10 個字符是一個.或一個數字。
然后你可以匹配可選數字,并可選匹配一個點和可選數字:
^(?=[.\d]{10}$)\d*(?:\.\d*)?$
模式匹配:
^字串的開始(?=[.\d]{10}$)正向前瞻,斷言 10 個字符.或數字直到字串結束\d*匹配可選數字(?:\.\d*)?可選匹配一個`. 和可選數字$字串結束
請參閱正則運算式演示。
如果圖案不應以點結尾:
^(?=[.\d]{10}$)\d*(?:\.\d )?$
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/342420.html
標籤:javascript 正则表达式
