一步一步寫正則 1:金額正則表達式
用一個正則表達式來檢查輸入的"錢"是否形式正確.有四種錢的表示形式我們可以接受:"10000.00" 和 "10,000.00", 和沒有 "分" 的 "10000" 和 "10,000":
^[1-9][0-9]*$
這表示任意一個不以0開頭的數字,但是,這也意味著一個字符"0"不通過,所以我們采用下麵的形式:
^(0|[1-9][0-9]*)$
一個0或者一個不以0開頭的數字.我們還可以允許開頭有一個負號:
^(0|-?[1-9][0-9]*)$
這表示一個0或者一個可能為負的開頭不為0的數字.OK,讓我們不要這麼嚴格了.讓用戶以0開頭好了.把負號的匹配也去掉,因為錢總不能是負的吧.下麵我們要加的是說明可能的小數部分:
^[0-9]+(.[0-9]+)?$
必須說明的是,小數點後麵至少應該有1位數,所以"10."是不通過的,但是 "10" 和 "10.2" 是通過的.
^[0-9]+(.[0-9]{2})?$
這樣我們規定小數點後麵必須有兩位,如果你認為太苛刻了,可以這樣:
^[0-9]+(.[0-9]{1,2})?$
這樣就允許用戶隻寫一位小數.下麵我們該考慮數字中的逗號了,我們可以這樣:
^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
"1到3個數字,後麵跟著任意個 逗號+3個數字 " 很簡單,不是嗎?但是讓我們使得逗號成為可選,而不是必須:
^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
這就是最終結果了,別忘了"+"可以用"*"替代如果你覺得空字符串也可以接受的話(奇怪,為什麼?)最後,別忘了在用函數時去掉去掉那個反斜杠,一般的錯誤都在這裏.OK了,當你的驗證完成後,用str_replace(",", "", $money)把逗號去掉,然後把它的類型設為double,這樣我們可以用它進行計算.
最後更新:2017-04-02 06:52:19