2012-02-15 275 views
0

我尝试验证字段。三个字段只能包含数字。这些字段具有变量名称$ num1,$ num2,$ num3。我把它们放在一个数组中,然后运行preg_match,但它不起作用。我应该怎么做?Php使用preg_match验证

$valnum = array (‘$num1’, ‘$num2’, ‘$num3’); 
    if (preg_match('/[0-9]/', $valnum)){ 
echo $mycost; 
} 
    else { 
echo 'You can only enter numbers'; 
    } 
+0

'[0-9]'只会匹配一个数字。另外,'preg_match'接受一个字符串作为它的第二个参数,而不是一个数组。 – 2012-02-15 21:59:24

+1

@EtiennedeMartel实际上[0-9]会匹配任何字符串与其中的数字。 – Petah 2012-02-15 22:00:15

+0

您是否正在使用MS字等文字处理工具编写代码?你的代码中有印刷引号,这是行不通的。您应该考虑使用文本编辑器,例如'Notepad ++'或'GVim'! – ThiefMaster 2012-02-16 01:10:11

回答

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; 
} 

>

收益99.99

+0

我试过is_numeric但它没有工作。 – 1199871 2012-02-15 22:16:34

+0

$ valnum = array('$ num1','$ num2','$ num3'); \t foreach($ valnum as $ element){ if(is_numeric($ element)){ echo $ mycost; } else { echo'您只能输入数字'; } } – 1199871 2012-02-15 22:17:20

+0

没有工作如何?变量的值是数字吗? – 2012-02-15 22:18:17

1

考虑使用filter_var,因为它是DESG独立非执行董事为这种类型的验证:

$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/en/function.filter-var-array.php

+0

“数字”可能不是=整数。 – 2012-02-15 22:04:27

+0

现在我使用is_numeric(),但是当我获得时间时,我也会尝试这个解决方案。谢谢。 – 1199871 2012-02-15 22:45:45

+0

@Dagon http://www.php.net/manual/en/filter.constants.php会显示可用的过滤器类型。数字就是其中之一。 – Petah 2012-02-16 04:07:28

0

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

  • 先加^(字符串的开头)和$(结束串meta characters你的正则表达式
  • 附加处理的花车
  • 考虑字符串删除空格)(用户可以决定输入1 800,而不是1800
  • 使用\d - escape sequence为十进制数组

所以最终的正则表达式看起来像:~^\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

感谢您的信息。 – 1199871 2012-02-15 22:46:53