2012-02-15 210 views
0

我嘗試驗證字段。三個字段只能包含數字。這些字段具有變量名稱$ num1,$ num2,$ num3。我把它們放在一個數組中,然後運行preg_match,但它不起作用。我應該怎麼做?Php使用preg_match驗證

$valnum = array (‘$num1’, ‘$num2’, ‘$num3’); 
    if (preg_match('/[0-9]/', $valnum)){ 
echo $mycost; 
} 
    else { 
echo 'You can only enter numbers'; 
    } 
+0

'[0-9]'只會匹配一個數字。另外,'preg_match'接受一個字符串作爲它的第二個參數,而不是一個數組。 – 2012-02-15 21:59:24

+1

@EtiennedeMartel實際上[0-9]會匹配任何字符串與其中的數字。 – Petah 2012-02-15 22:00:15

+0

您是否正在使用MS字等文字處理工具編寫代碼?你的代碼中有印刷引號,這是行不通的。您應該考慮使用文本編輯器,例如'Notepad ++'或'GVim'! – ThiefMaster 2012-02-16 01:10:11

回答

0
is_numeric() 

將是一個更好的辦法

//工作了呢?例如:

<?php 
$num1 = '1'; 
$num2 = '11'; 
$num3 = '11.11'; 

$mycost = '$99.99'; 

$valnum = array($num1,$num2,$num3); 
$check = ''; 
foreach($valnum as $element){ 
    if(!is_numeric($element)){ 
     $check = 'bad'; 
     break; 
    } 
} 

if($check=='bad'){ 
    echo 'You can only enter numbers'; 
}else{ 
    echo $mycost; 
} 

>

收益99.99

+0

我試過is_numeric但它沒有工作。 – 1199871 2012-02-15 22:16:34

+0

$ valnum = array('$ num1','$ num2','$ num3'); \t foreach($ valnum as $ element){ if(is_numeric($ element)){ echo $ mycost; } else { echo'您只能輸入數字'; } } – 1199871 2012-02-15 22:17:20

+0

沒有工作如何?變量的值是數字嗎? – 2012-02-15 22:18:17

1

考慮使用filter_var,因爲它是DESG獨立非執行董事爲這種類型的驗證:

$array = array(1, 2, 'a', 'b'); 
var_dump(filter_var_array($array, FILTER_VALIDATE_INT)); 

輸出:

array 
    0 => int 1 
    1 => int 2 
    2 => boolean false 
    3 => boolean false 

http://php.net/manual/en/function.filter-var-array.php

+0

「數字」可能不是=整數。 – 2012-02-15 22:04:27

+0

現在我使用is_numeric(),但是當我獲得時間時,我也會嘗試這個解決方案。謝謝。 – 1199871 2012-02-15 22:45:45

+0

@Dagon http://www.php.net/manual/en/filter.constants.php會顯示可用的過濾器類型。數字就是其中之一。 – Petah 2012-02-16 04:07:28

0

如果您需要通過preg_match()檢查數字輸入,你應該:

  • 先加^(字符串的開頭)和$(結束串meta characters你的正則表達式
  • 附加處理的花車
  • 考慮字符串刪除空格)(用戶可以決定輸入1 800,而不是1800
  • 使用\d - escape sequence爲十進制數組

所以最終的正則表達式看起來像:~^\d+([.,]\d+)?$~

你還是使用is_numeric()但根據手冊它接受「科學格式」:

求給定變量是否是數字。數字字符串包括可選符號 ,任意數字位數,可選小數部分和可選指數部分 。因此+ 0123.45e6是一個有效的數值。 十六進制符號(0xFF)也是允許的,但只有沒有符號, 十進制和指數部分。

我個人避免,這個功能只允許輸入太多,你必須擔心轉換爲有效的形式。

There'are兩個漂亮的功能intval()floatval()只是一個小例子:

$numbers = array('1.8', '3', 'hello'); 

foreach($numbers as $i){ 
    var_dump($i); 
    var_dump(intval($i)); 
    var_dump(floatval($i)); 
    echo "\n"; 
} 

輸出:

string(3) "1.8" 
int(1) 
float(1.8) 

string(1) "3" 
int(3) 
float(3) 

string(5) "hello" 
int(0) 
float(0) 

,它允許你這樣做:

php > $str = "3.8"; 
php > $i = intval($str); 
php > var_dump($i == $str); 
bool(false) 
php > $str = "3"; 
php > $i = intval($str); 
php > var_dump($i == $str); 
bool(true) 

你也可以使用filter_var(),但這些功能只是d沒有爲我工作,我會建立這樣的功能:

function get_integer($input){ 
    if($input === null){ 
     return null; 
    } 

    if($input === ''){ 
     return null; 
    } 

    $i = intval($input); 
    if($i != $input){ 
     return null; 
    } 

    return $i; 
} 

$myCol = get_integer($_POST['foo']); 
if($myCol === null){ 
    die('You naughty boy!'); 
} 
+0

感謝您的信息。 – 1199871 2012-02-15 22:46:53