使用preg_匹配进行Php验证
我尝试验证字段。三个只能包含数字的字段。这些字段的变量名为$num1、$num2、$num3。我把它们放在一个数组中,然后运行preg_match,但它不起作用。我该怎么办使用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'; } 这将是一个更
$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!');
}