如何为多个值检查单个输入文本框


How to check single input text box for multiple values?

我想创建一个网站,用户可以检查奖金债券号码,我也知道一点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

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

$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";

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

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
}

可以使用

strpos
这样的

if (strpos($str,',') == true) {
     echo "it has comma";
} else if (strpos($str,'-') == true) {
    echo "it has hyphen";
} else {
     echo "single number";
 }
将echo替换为if条件。

这样做:

<?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";
  }
?>

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

代码:(PHP Demo &Regex模式演示/解释)

// 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个破折号的范围值
  • 不以数字开始和结束的范围值
  • 空值