我有一个表单,其中有许多表单字段正在动态生成,我正试图通过以下代码将数字输入字段限制为最小值和最大值,而这些代码在firefox 中不起作用
$products=getAllProducts();//an array of product objects
echo '<form method="POST" action="">';
for($i=0;$i<(count($products));$i++){
echo '<label>'.$products[$i].getName().'</label>';
echo '<input type="number" pattern="'d*" min="1" max="'.$products[$i].getAvailableQty().'" name="'.$products[$i].getId().'"></input>';
}
echo '<input id="cartButton" type="submit" value="Submit" formaction="cart.php" />';
echo '</form>';
有人建议我使用正则表达式,但我不知道如何每次都为不同的值编写正则表达式。最小值为1,最大值为$products[$i].getAvailableQty()
。如有任何帮助,我们将不胜感激。
您可以使用以下函数来获取正则表达式
function getInputValidationRegex($qty){
$qtyCopy=$qty;
$regexpArr=array();
$noOfDigits=strlen((String)$qty);
for($i=1;$i<=$noOfDigits;$i++){
if($i<$noOfDigits){
$str='';
if($i==1)
$str.='[1-9]';
else
$str.='[0-9]{1,'.($i-1).'}';
$regexpArr[]=$str;
}
if($i==$noOfDigits){
$str='';
for($k=1;$k<=$i;$k++){
$lastDigit=$qtyCopy%10;
$qtyCopy=floor($qtyCopy/10);
if($k==$i){
$str2='[1-'.$lastDigit.']'.$str;
$str=$str2;
}
else{
$str2='[0-'.$lastDigit.']'.$str;
$str=$str2;
}
}
$regexpArr[]=$str;
}
}
return implode("|",$regexpArr);
}
并修改您的代码如下
$products=getAllProducts();//an array of product objects
echo '<form method="POST" action="">';
for($i=0;$i<(count($products));$i++){
echo '<label>'.$products[$i].getName().'</label>';
echo '<input type="number" pattern="'.getInputValidationRegex($products[$i].getAvailableQty()).'" name="'.$products[$i].getId().'"></input>';
}
echo '<input id="cartButton" type="submit" value="Submit" formaction="cart.php" />';
echo '</form>';