【问题标题】:How to check single input text box for multiple values?如何检查单个输入文本框的多个值?
【发布时间】:2013-04-17 05:44:53
【问题描述】:

我想创建一个网站,用户可以在其中查看奖金号码,并且我对php也有所了解,所以我在html中创建了一个表单:

<form>
    Enter your price bond number <input type="text" name="number"><br>
    <input type="submit" value="try your luck">
</form>

现在在 php 中,我想检查它是单个数字、范围数字还是逗号分隔的数字,例如:

1023342
1023342-10233100
1023342,1023343,1023344,1023345

我想根据用户输入的内容采取不同的操作。

【问题讨论】:

    标签: php html forms csv range


    【解决方案1】:
    $mynumber = $_POST["number"];
    $pieces = explode(",", $mynumber);
    if(count($pieces)>0)
    echo "Comma separated";
    $pieces = explode("-", $mynumber);
    if(count($pieces)>0)
    echo "Range Value";
    else
    echo "Single Value";
    

    上面的代码在某种程度上很有用,最后你会有一个数字数组来处理。

    【讨论】:

      【解决方案2】:
      function check_input($number){
        if(ctype_digit($number)){
         //case1: simple number
         return 1;
        }
        if(preg_match('/(\d)-(\d)/', $number, $out)){
         //Case2: range
         //we need to check if the range is valid or not
         if($out[1] >= $out[2]){
          //echo 'error: the first number in range should be lessthan second number';
          return false;
         }
         return 2;
        }
        if(preg_match('/\d+(,\d+)+/', $number, $out)){
         //Case3: comma seperated
         return 3;
        }
        return false;
      }
      
      //usage
      if(check_input($number) == 1){
        //do something
      }
      

      【讨论】:

      • 好一个,一个问题,为什么你在 ctype_digit($number) 条件下返回 1
      • 这个 $out 变量是从哪里来的?
      • PHP preg_match生成的$put变量,如果匹配,就是一个按分组的数组。 ctype_digit 检查 $number 是否仅包含数字,然后是它的大小写 1
      【解决方案3】:

      你可以使用

      strpos
      

      喜欢这个

      if (strpos($str,',') == true) {
           echo "it has comma";
      } else if (strpos($str,'-') == true) {
          echo "it has hyphen";
      } else {
           echo "single number";
       }
      

      通过替换 echo 将您各自的功能置于 if 条件中。

      【讨论】:

        【解决方案4】:

        做这样的事情:

        <?php
         $value=1023342;
         if (preg_match("-", $value)) {
             echo " - was found.";
          } else if(preg_match(",", $value)){
             echo " , was found";
          }
          else
          {
            echo "it is a simple number";
          }
        ?>
        

        【讨论】:

          【解决方案5】:

          考虑到用户可能作为输入提交的内容,我觉得所有其他答案都有点未成熟。我决定编写一个全面的解决方案,它将删除无效值并生成一组有效值以供您继续处理。

          代码:(PHP Demo & Regex Pattern Demo/Explanation)

          // declare limit that value ranges cannot exceed (for project-specific reasons
          //   and/or to avoid memory limitation failures)
          $limit=100;
          
          $result=[];  // declare an empty array
          // split on commas, and filter out any invalid values
          foreach(preg_grep("/^( ?(\d+-\d++|\d+),?)+$/",explode(',',$input)) as $chunk){
              if(strpos($chunk,'-')===false){
                  $result[]=(int)$chunk;  // cast value as an integer for uniformity
              }else{
                  $range=explode('-',$chunk);
                  if(($size=abs($range[0]-$range[1]))<=$limit){
                      $result=array_merge($result,range($range[0],$range[1]));
                  }else{
                      echo "Value range ($range[0] to $range[1]) size ($size)
                            exceeds allowed limit ($limit)";
                  }
              }
          }
          

          运行此代码块后,您可以根据项目需要使用$result 数组中的值。

          我的代码将允许用户:

          • 在逗号之前和/或之后添加一个空格
          • 输入单个值
          • 输入多个逗号分隔值
          • 输入范围值
          • 以逗号分隔值的形式输入单个值和范围值的组合

          我的代码会过滤掉:

          • 非数字值
          • 范围表达式中包含超过 1 个破折号的范围值
          • 范围值不以数字开头和结尾
          • 空值

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-09-19
            • 1970-01-01
            • 2017-09-09
            • 2021-12-15
            • 1970-01-01
            • 1970-01-01
            • 2017-04-04
            • 1970-01-01
            相关资源
            最近更新 更多