我想创建一个网站,用户可以检查奖金债券号码,我也知道一点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";
}
这样做:
<?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个破折号的范围值
- 不以数字开始和结束的范围值
- 空值