如何在php中为html5形式的数字输入验证编写regex模式


How to write a regex pattern in php for an html5 form numeric input validation?

我有一个表单,其中有许多表单字段正在动态生成,我正试图通过以下代码将数字输入字段限制为最小值和最大值,而这些代码在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>';