【问题标题】:is there any function to check values (only 0.25 steps) without declaring them?是否有任何功能可以检查值(仅 0.25 步)而不声明它们?
【发布时间】:2013-12-16 15:39:01
【问题描述】:

我正在构建一个表单,我想检查用户输入。 只允许从 0 到 30 的数字,带 2 位小数,但仅在这些步长中增加 0.25 步。 所以例如这个值是允许的:0.25; 1.50; 3.75; ... 该值不允许为 0.26; 1.53; ... 我可以在不声明所有允许值的情况下进行检查吗? 我希望有人知道我的意思并能帮助我。

谢谢

【问题讨论】:

  • 使用正则表达式会更简单吗?我在答案中添加了一个。

标签: php jquery regex laravel-4


【解决方案1】:

如果你使用正则表达式,这是一个解决方案(如果没有,没问题)

 #  ^[+-]?(?:[0-9]|[12][0-9]|30)\.(?:[27]5|[05]0)$

 ^
 [+-]?               # optional + or -
 (?:
      [0-9]          # 0 - 9
   |  [12] [0-9]     # 10 - 29
   |  30             # 30
 )
 \.                  # .
 (?:
      [27] 5       # 25 or 75
   |  [05] 0       # 00 or 50
 )
 $ 

或者,在 '00' 和 '50' 上带有可选的小数位和尾随零

 ^ [+-]? 
 (?:
      [0-9] 
   |  [12] [0-9] 
   |  30 
 )
 (?:
      \.
      (?:
           [27] 5
        |  [05] 0? 
      )
 )?
 $ 

【讨论】:

    【解决方案2】:

    试试这样的:

    <?php
    
    // $i = 3.25;
    $dec = explode('.', $i);
    $dec = end($dec);
    
    if($dec % 25 == 0 || $dec == 5)
        echo 'Accept';
    ?>
    

    【讨论】:

    • 从整数中去掉小数点是不必要的。您可以立即进行模运算并获得相同的结果。
    【解决方案3】:

    您可以获取该值,将其转换为 Number(只是为了确定),将其乘以 100 并检查除法的其余部分。在代码中:

    var value = $('#yourFieldId').val();
    // Cast it from String to Number
    value = Number(value);
    
    // now check that it is in the range
    if( value < 30 && value > 0 ){
    
      if( (value * 100) % 25 === 0) ){
        return "It's valid"; //perhaps true?
      }
    
    }
    return 'not valid'; // perhaps you want to return false
    

    【讨论】:

      【解决方案4】:

      fiddle Demo

      if (this.value % .25 === 0 && this.value <= 30 && this.value >= 0 && this.value.trim().length)
      

      【讨论】:

      • 如果你复制粘贴一个负数,它会说:有效。 OP 只希望值 0
      • @DanielLisik 谢谢 :)
      【解决方案5】:

      使用简单的“for”循环:

      var valid=false;
      for(var i=0;i<30*4;i++){
         if(value==i*0.25)
         valid=true;
      }
      if(valid){
         // It's a valid input
      }
      

      希望这会有所帮助;)

      编辑:改用模数(参见其他帖子),如果您有很多代码,这确实很耗时。

      【讨论】:

      • 这是浪费。请参阅使用模数的其他答案。
      【解决方案6】:

      该值除以 0.25 时不应有余数

      查看$value % 0.25 == 0

      当然要限制在你的范围内

      【讨论】:

      • 虽然这对于 0.25 来说很好(因为它是 2 的幂),但通常我会允许一个很小的范围来满足浮点精度。例如,如果使用 0.1 的步长,请检查 $x = $value % 0.1$x &lt; 0.0001 &amp;&amp; $x &gt; -0.0001。验证通过后,您可以对值进行四舍五入以确保它是特定值。
      【解决方案7】:

      在 jQuery 中,您这样做是为了检查值:

      if ($("#num").val() % 0.25 == 0 && $("#num").val().length >= 0 
      && $("#num").val().length <= 30)) { 
       // Valid number
      } 
      

      但是,不要忘记控制服务器端的值。

      在 PHP 中你可以这样做:

      if (strlen($val) >= 0 && strlen($val) <= 30 && $val % 0.25 == 0) {
      
         // Valid number
      
      }
      

      【讨论】:

      • 你能扩展函数来检查第一个字符是+还是-?因为某些字段允许相同的值,但只能使用 + 或 - 例如-0.25; +3.5
      • 当然。只需使用此代码:if ($("#num")val().charAt(0) == '-') { // a "-" }。但要让它与上述功能一起使用,您必须更改有效值间隔(将 $("#num").val().length &gt;= 0$("#num").val().length &lt;= 30 更改为您希望有效的值。
      • PHP 将在模数(除以零)上发出警告。您应该首先将该值乘以 100,然后对 25 进行取模: ($val * 100) % 25
      猜你喜欢
      • 2021-06-21
      • 2014-10-29
      • 2019-01-19
      • 2021-10-04
      • 2010-10-14
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多