gvalid_rule_range.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // Copyright 2018 gf Author(https://github.com/gogf/gf). All Rights Reserved.
  2. //
  3. // This Source Code Form is subject to the terms of the MIT License.
  4. // If a copy of the MIT was not distributed with this file,
  5. // You can obtain one at https://github.com/gogf/gf.
  6. package gvalid
  7. import (
  8. "strconv"
  9. "strings"
  10. )
  11. // checkRange checks <value> using range rules.
  12. func checkRange(value, ruleKey, ruleVal string, customMsgMap map[string]string) string {
  13. msg := ""
  14. switch ruleKey {
  15. // Value range.
  16. case "between":
  17. array := strings.Split(ruleVal, ",")
  18. min := float64(0)
  19. max := float64(0)
  20. if len(array) > 0 {
  21. if v, err := strconv.ParseFloat(strings.TrimSpace(array[0]), 10); err == nil {
  22. min = v
  23. }
  24. }
  25. if len(array) > 1 {
  26. if v, err := strconv.ParseFloat(strings.TrimSpace(array[1]), 10); err == nil {
  27. max = v
  28. }
  29. }
  30. v, err := strconv.ParseFloat(value, 10)
  31. if v < min || v > max || err != nil {
  32. msg = getErrorMessageByRule(ruleKey, customMsgMap)
  33. msg = strings.Replace(msg, ":min", strconv.FormatFloat(min, 'f', -1, 64), -1)
  34. msg = strings.Replace(msg, ":max", strconv.FormatFloat(max, 'f', -1, 64), -1)
  35. }
  36. // Min value.
  37. case "min":
  38. var (
  39. min, err1 = strconv.ParseFloat(ruleVal, 10)
  40. valueN, err2 = strconv.ParseFloat(value, 10)
  41. )
  42. if valueN < min || err1 != nil || err2 != nil {
  43. msg = getErrorMessageByRule(ruleKey, customMsgMap)
  44. msg = strings.Replace(msg, ":min", strconv.FormatFloat(min, 'f', -1, 64), -1)
  45. }
  46. // Max value.
  47. case "max":
  48. var (
  49. max, err1 = strconv.ParseFloat(ruleVal, 10)
  50. valueN, err2 = strconv.ParseFloat(value, 10)
  51. )
  52. if valueN > max || err1 != nil || err2 != nil {
  53. msg = getErrorMessageByRule(ruleKey, customMsgMap)
  54. msg = strings.Replace(msg, ":max", strconv.FormatFloat(max, 'f', -1, 64), -1)
  55. }
  56. }
  57. return msg
  58. }