考虑到用户可能提交的输入内容,我觉得所有其他答案都有点未成熟。我决定编写一个全面的解决方案,该解决方案将删除无效值并生成一组有效值以供您继续处理。
代码:(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 个破折号的范围值
- 不以数字开头和结尾的范围值
- 空值