zoukankan      html  css  js  c++  java
  • 006#验证浮点数输入

    基本思路:

    1、检查输入值是否包含小数点"."

    2、包含小数点则对小数点的整数部分和小数部分分开测试

    3、确保小数点两边都是有效的整数,且没有多余的负号(针对validint进行补充判断)

    4、最后检查是否输入值只是一个负号和小数点

    5、其他:待增强

    注:本脚本不接受科学计数法:1.24e4

    #!/usr/bin/env bash
    #
    # FILENAME: validfloat.sh
    # 验证浮点数输入
    #
    # 整数判断
    validint(){
      number=$1
      min=$2
      max=$3
    
      # 空值检测
      if [ -z $number ]; then
        echo "You didn't input anything." >&2
        return 1
      fi
    
      # 负数符号检测
      if [ "${number%${number#?}}" = "-" ]; then
        num="${number#?}"
      else
        num="${number}"
      fi
      
      # 检查除负数符号后的数字是否是整数
      nodigits=$(echo $num | sed 's/[[:digit:]]//g')
      if [ ! -z "$nodigits" ]; then
        echo "Invalid number format. Only digits, no commas, spaces, etc." >&2
        return 1
      fi
    
      # 判断输入值是否小于指定最小值
      if [ ! -z $min ]; then
        if [ $number -lt $min  ]; then
          echo "You value is too small. the smallest value is $min" >&2
          return 1
        fi
      fi
    
      # 判断输入值是否大于指定最大值
      if [ ! -z $max ]; then
        if [ $number -gt $max ]; then
          echo "You value is too big. the largest value is $max" >&2
          return 1
        fi
      fi
    
      return 0
    }
    
    # 浮点数判断
    validfloat(){
      fvalue="$1"
      # 检查输入的数字是否有小数点
      if [ ! -z $(echo $fvalue|sed 's/[^.]//g') ]; then
        integerPart="$(echo $fvalue|cut -d. -f1)" # 整数部分
        decimalPart="${fvalue#*.}"  # 小数部分
        
        # 判断整数部分是否合法
        if [ ! -z $integerPart ]; then
          if ! validint "$integerPart" "" ""; then
            return 1
          fi
        fi
    
        # 判断小数部分是否合法
        if [ "${decimalPart%${decimalPart#?}}" = "-" ]; then
          echo "Invalid float number: '-' not allowed after decimal point." >&2
          return 1
        fi
    
        if [ "${decimalPart}" != "" ]; then
          if ! validint "$decimalPart" "0" ""; then
            return 1
          fi
        fi
      else
        if [ "$fvalue" = "-" ]; then
          echo "Invalid float format. " >&2
          return 1
        fi
      
        if ! validint "$fvalue" "" ""; then
          return 1
        else
          echo "$1 is integer number."
          return 1
        fi
      fi
        return 0
    }
    
    # 验证浮点数输入
    if [ $# -ne 1 ]; then 
      echo "Usage: $0 floating_Number." >&2
      exit 1
    fi
    
    if validfloat $1; then
      echo "$1 is a valid floating-point value."
    fi
    exit 0
    *** 你必须十分努力,才能看起来毫不费力 ***
  • 相关阅读:
    我的公众号 猫和大叔(maohedashu)
    centos编译php时出现make: *** [sapi/fpm/phpfpm] Error 1
    如何在centos和linux等主机上安装 pstree
    如何在centos下卸载干净nginx
    监控感悟(一)
    ant design vue 获取上传图片的像素
    ant vue中atree默认展开指定的树节点不起作用
    uniapp中组件属性设置不生效的解决方案
    vue+canvas实现简易画板
    ant design vue级联选择懒加载省市区三级数据
  • 原文地址:https://www.cnblogs.com/bigtree2pingping/p/12957039.html
Copyright © 2011-2022 走看看