我正在嘗試創建一個正則運算式來驗證紅/綠/藍值運算式。我需要正則運算式匹配的運算式包括:
- RGB(1, 10, 100)
- RGB(100, 10, 1)
- RGB(1,2,3)
- RGBA(1, 2, 3, .75)
- RGBA(1, 2, 3, 0.75)
- RGBA(1, 2, 3, 0)
- RGBA(1, 2, 3, 1)
目前,我有以下正則運算式:
^rgba?\((([ -]?\d (\.\d )?),\s*){2}[ -]?\d (\.\d )?(,\s*(0?\.\d|[01]))?\)$
此運算式適用于 #1、#2、#3、#6 和 #7。但是,它在#4 和#5 中失敗了。我一直盯著最后一組。對我來說,它看起來應該接受小數。顯然,事實并非如此。我究竟做錯了什么?
uj5u.com熱心網友回復:
您的正則運算式中的問題是,您的運算式不允許最后一個小數點后面的長度大于 1 的值。考慮到原來的正則運算式:
^rgba?\((([ -]?\d (\.\d )?),\s*){2}[ -]?\d (\.\d )?(,\s*(0?\.\d|[01]))?\)$
您將獲得 rgba(1, 2, 35.132, 0.7) 的正值,但 rgba(1, 2, 35.132, 0.75) 的值為負。
解決方案是在最后一個 \d 數字指示符上添加一個星號,表示可以有任意數量的數字。加號會更好,因為它會檢測到小數點后面有 0 位數字的錯誤值,需要至少 1 個 \d 實體。
^rgba?\((([ -]?\d (\.\d )?),\s*){2}[ -]?\d (\.\d )?(,\s*(0?\.\d*|[01]))?\)$
希望這可以幫助你!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/341556.html
標籤:javascript 正则表达式
