繁体   English   中英

PHP验证与preg_match

[英]Php validate with preg_match

我尝试验证字段。 三个只能包含数字的字段。 这些字段具有变量名称$ 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';  
    }

考虑将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

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

   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

如果您需要通过preg_match()检查数字输入,则应该:

  • 首先,将^ (字符串的开头)和$ (字符串的结尾) 元字符添加到您的正则表达式中
  • 添加对浮点的处理
  • 考虑从字符串去除空间(用户可以决定输入1 800 ,而不是1800
  • 使用\\d十进制数字组的转义序列

因此最终的正则表达式看起来像: ~^\\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!');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM