使用preg_匹配进行Php验证

使用preg_匹配进行Php验证,php,Php,我尝试验证字段。三个只能包含数字的字段。这些字段的变量名为$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'; } 这将是一个更

我尝试验证字段。三个只能包含数字的字段。这些字段的变量名为$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';  
    }
这将是一个更好的方法

//拟定示例:

<?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

考虑使用
filter\u 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

如果您要求通过
preg\u match()
检查数字输入,您应该:

  • 首先,将
    ^
    (字符串的开头)和
    $
    (字符串的结尾)添加到您的regexp中
  • 添加浮动的处理
  • 考虑从字符串中删除空格(用户可能决定输入
    1800
    ,而不是
    1800
  • 对十进制数字组使用
    \d
    -
所以最后的regexp看起来像:
~^\d+([,]\d+)?$~

您应该使用,但根据手册,它接受“科学格式”:

查找给定变量是否为数字。数字字符串由 可选符号、任意位数、可选小数部分和 可选的指数部分。因此+0123.45e6是一个有效的数值。 也允许使用十六进制表示法(0xFF),但只允许不带符号, 小数和指数部分

这是我个人避免的,这个函数只允许输入太多,您必须担心转换为有效形式

有两个很好的函数,仅举一个小例子:

$numbers=数组('1.8','3','hello');
foreach($i){
var_dump(一美元);
var_dump(intval($i));
var_dump(floatval($i));
回音“\n”;
}
和输出:

字符串(3)“1.8”
int(1)
浮动(1.8)
字符串(1)“3”
int(3)
浮动(3)
字符串(5)“你好”
int(0)
浮动(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)
您也可以使用,但这些函数对我不起作用,我会构建如下函数:

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
将字符串作为其第二个参数,而不是数组。@EtienDemartel实际上[0-9]将匹配任何包含数字的字符串。您是否使用诸如MS word之类的字处理工具来编写代码?您的代码中有无法使用的印刷引号。你应该考虑使用一个文本编辑器,比如“代码>记事本+ +<代码>或<代码> GVim < /代码>!“numbers”可能不=整数。我现在使用is_numeric(),但有时间我也会尝试这个解决方案。谢谢。@Dagon将向您展示可用的过滤器类型。数字是其中之一。$valnum=array($num1’、$num2’、$num3’);foreach($valnum as$element){if(is_numeric($element)){echo$mycost;}else{echo'您只能输入数字';}}当我在字段中输入偶数时,我收到错误消息“您只能输入数字”。我不知道如何输入,确定它们都是数字?请参阅上面的改进版本对不起,我编写了$valnum=array('$num1','$num2','$num3');但是当我写$valnum=array($num1,$num2,$num3)时,它工作得很好;我只是想知道,数组中变量周围的“”是否也适用?
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!');
}