• 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
    *** 你必须十分努力,才能看起来毫不费力 ***
  • 相关阅读:
    AngularJS特性
    FOR XML PATH 解决联接返回结果集各记录问题
    ASP.NET MVC与WebForm区别
    C#.net 获取当前应用程序所在路径及环境变量
    .net 4.0 运行时中运行.net2.0开发的程序
    混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集
    sort() 方法用于对数组的元素进行排序
    SQL Server 表和索引存储结构
    SQL Server 数据库文件管理
    navicat 导入数据报错 --- 1153
  • 原文地址:https://www.cnblogs.com/bigtree2pingping/p/12957039.html
Copyright © 2020-2023  润新知