2014-04-30 21 views
0

我具有其中有被動態地產生許多表單字段的表單,我試圖來限制數字輸入字段通過下面的代碼的最小和最大值未在Firefox如何在PHP中爲html5表單數值輸入驗證編寫正則表達式模式?

$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() value.Any幫助表示讚賞

+1

很抱歉,如果我誤解。如果您只是想確保用戶沒有輸入高於可用數量的值,則在這種情況下,RegEx不是必需的。只需在表單提交後使用javascript驗證輸入的數量即可。 –

+0

即使關閉了java腳本,我也希望在客戶端驗證它! – user3587824

+0

生成的HTML是什麼樣的? – Phil

回答

0

您可以使用以下函數用於獲取正則表達式

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>'; 
+0

非常感謝它的工作! – user3587824