github.com/gogf/gf@v1.16.9/util/gvalid/gvalid_validator_rule_range.go (about)

     1  // Copyright GoFrame Author(https://goframe.org). 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  
     7  package gvalid
     8  
     9  import (
    10  	"strconv"
    11  	"strings"
    12  )
    13  
    14  // checkRange checks `value` using range rules.
    15  func (v *Validator) checkRange(value, ruleKey, ruleVal string, customMsgMap map[string]string) string {
    16  	msg := ""
    17  	switch ruleKey {
    18  	// Value range.
    19  	case "between":
    20  		array := strings.Split(ruleVal, ",")
    21  		min := float64(0)
    22  		max := float64(0)
    23  		if len(array) > 0 {
    24  			if v, err := strconv.ParseFloat(strings.TrimSpace(array[0]), 10); err == nil {
    25  				min = v
    26  			}
    27  		}
    28  		if len(array) > 1 {
    29  			if v, err := strconv.ParseFloat(strings.TrimSpace(array[1]), 10); err == nil {
    30  				max = v
    31  			}
    32  		}
    33  		valueF, err := strconv.ParseFloat(value, 10)
    34  		if valueF < min || valueF > max || err != nil {
    35  			msg = v.getErrorMessageByRule(ruleKey, customMsgMap)
    36  			msg = strings.Replace(msg, ":min", strconv.FormatFloat(min, 'f', -1, 64), -1)
    37  			msg = strings.Replace(msg, ":max", strconv.FormatFloat(max, 'f', -1, 64), -1)
    38  		}
    39  
    40  	// Min value.
    41  	case "min":
    42  		var (
    43  			min, err1    = strconv.ParseFloat(ruleVal, 10)
    44  			valueN, err2 = strconv.ParseFloat(value, 10)
    45  		)
    46  		if valueN < min || err1 != nil || err2 != nil {
    47  			msg = v.getErrorMessageByRule(ruleKey, customMsgMap)
    48  			msg = strings.Replace(msg, ":min", strconv.FormatFloat(min, 'f', -1, 64), -1)
    49  		}
    50  
    51  	// Max value.
    52  	case "max":
    53  		var (
    54  			max, err1    = strconv.ParseFloat(ruleVal, 10)
    55  			valueN, err2 = strconv.ParseFloat(value, 10)
    56  		)
    57  		if valueN > max || err1 != nil || err2 != nil {
    58  			msg = v.getErrorMessageByRule(ruleKey, customMsgMap)
    59  			msg = strings.Replace(msg, ":max", strconv.FormatFloat(max, 'f', -1, 64), -1)
    60  		}
    61  
    62  	}
    63  	return msg
    64  }