如果您需要通過preg_match()
檢查數字輸入,你應該:
所以最終的正則表達式看起來像:~^\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-9]'只會匹配一個數字。另外,'preg_match'接受一個字符串作爲它的第二個參數,而不是一個數組。 – 2012-02-15 21:59:24
@EtiennedeMartel實際上[0-9]會匹配任何字符串與其中的數字。 – Petah 2012-02-15 22:00:15
您是否正在使用MS字等文字處理工具編寫代碼?你的代碼中有印刷引號,這是行不通的。您應該考慮使用文本編輯器,例如'Notepad ++'或'GVim'! – ThiefMaster 2012-02-16 01:10:11