1

我想创建一个网站,用户可以在其中查看奖金债券号码,并且我对 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

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

4

5 回答 5

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

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

于 2013-04-17T05:55:18.047 回答
0

您可以使用

strpos

像这样

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

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

于 2013-04-17T05:48:21.717 回答
0

做这样的事情:

<?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";
  }
?>
于 2013-04-17T05:48:59.163 回答
0
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
}
于 2013-04-17T06:15:32.110 回答
0

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

代码:(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 个破折号的范围值
  • 不以数字开头和结尾的范围值
  • 空值
于 2017-04-28T02:05:59.220 回答