如果您需要通过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