- 需求:網店中折扣價格-要求大於0小於10,且允許保留一位小數點
- 需求分析:
1,)取值范圍為(0,10),兩端都是開區間;
2,)“可保留一位小數”,可以不包含小數,但如果包含小樹就一定要僅包含一位小數。
- 開發(javascript下):
- 第一步:0-10包含一位小數:/^\d(\.\d)?$/
- 第二步:排除特殊的0和0.0和10,這樣的寫法為:
/^[^0][^0.0][^10]\d(\.\d)?$/
測試下:是否是我們想要的結果呢?
- 答案:no
具體原因,我也解釋不清。
- 換種思路:
既然0、0.0及10不是我們想要的,我們是否應該可以拆分為兩種:
1,)[0.1,0.9]拆分為一組可取值的配置集合;
2,)[1.0,9.9]拆分為第二組可取值的配置集合;
3,)兩個集合拼接在一起不就是我們想要結果。
- 開發:
- [0.1,0.9]拆分為一組可取值的配置集合-javascript正則為:/^(0\.[1-9]{1})$/
- [1.0,9.9]拆分為第二組可取值的配置集合-javascript正則為:/^([1-9]{1})(\.\d{1})?$/
- [0.1,9.9]正則為:/^((0\.[1-9]{1})|(([1-9]{1})(\.\d{1})?))$/
- 經過測試:/^((0\.[1-9]{1})|(([1-9]{1})(\.\d{1})?))$/ 測試通過。