我尝试验证字段。三个可能只包含数字的字段。这些字段的变量名为$ num1,$ num2,$ num3。我把它们放在一个数组中然后我运行preg_match但它不起作用。我该怎么办?
$valnum = array (‘$num1’, ‘$num2’, ‘$num3’);
if (preg_match('/[0-9]/', $valnum)){
echo $mycost;
}
else {
echo 'You can only enter numbers';
}
答案 0 :(得分:1)
考虑使用filter_var
,因为它是为此类验证而设计的:
$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
答案 1 :(得分: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;
}
&GT;
返回99.99
答案 2 :(得分:0)
如果您要求preg_match()
检查数字输入,您应该:
^
(字符串的开头)和$
(字符串的结尾)meta characters添加到您的正则表达式1 800
而不是1800
)\d
- escape sequence表示十进制数组所以最终的正则表达式如下:~^\d+([.,]\d+)?$~
。
您应该使用is_numeric()
,但根据手册,它接受“科学格式”:
查找给定变量是否为数字。数字字符串组成 可选符号,任意位数,可选小数部分和 可选的指数部分。因此+ 0123.45e6是有效的数值。 也允许使用十六进制表示法(0xFF),但只能使用无符号, 十进制和指数部分。
我个人避免,这个功能只允许输入太多而你必须担心转换为有效的形式。
有两个不错的函数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()
,但这些功能对我不起作用,我会构建这样的函数:
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!');
}