PHP将XML输入验证为int

  • 本文关键字:验证 int XML PHP php xml
  • 更新时间 :
  • 英文 :


运行此代码时,它接受XML输入,并将键值解析为变量,以进行简单的算术计算。我尝试手动验证用户输入,以确保标记number1和number2是整数;

当回显变量时,它们显示为整数,但仍然满足条件,就好像它们不是一样。如果你能看到任何问题,请告诉我。

<?php
$XML = “<?xml version='1.0' encoding='UTF-8'?>.           
<arithmetic> 
<operation>add</operation>
<number1>5</number1>
<number2>3</number2>
</arithmetic>”;
$equation = simplexml_load_string($XML); //loads xml into variable
$operation = $equation->operation; // loads operation into variable
$number1 = $equation->number1; // loads number1 into variable
$number2 = $equation->number2; //loads number2 into variable
// If the values entered are not numbers return error message
if(is_numeric($number1) != 1){  
$number1 = "";
echo " Incorrect number 1 entered  ";
}
if(is_numeric($number2) != 1){
$number2 = "";
echo " Incorrect number 2 entered   ";
}
.....

如果对number1执行var_dump,则会发现它不是字符串,而是SimpleXMLElement类型的对象。

object(SimpleXMLElement)[3]
public 0 => string '1' (length=1)

因此,只需对变量进行强制转换,即可将其转换为字符串:

$operation = (string) $equation->operation; // loads operation into variable
$number1 =(string) $equation->number1; // loads number1 into variable
$number2 = (string) $equation->number2; //loads number2 into variable

更新:这将在后台调用::__toString()。查看文档。

PHP的is_numeric()本质上测试数字或字符串的格式是否像数字,例如"123〃;或";123.45〃;(字符串(或123或123.45(分别为整数和浮点(。

is_int(),但它检查变量的类型是否为整数。这对您没有帮助,因为您是从字符串开始的。

基于@pouria的回答:既然你是从一个对象开始的,你需要首先用将它转换成字符串

$number1 =(string) $equation->number1;

这会给你一个字符串,但要测试它是否是"字符串";类似整数的";(即仅由数字组成(您可以这样做:

// Test whether $number1 consists of at least one digit:
if ( preg_match( '/^d+$/', $number1 ) ) {
// $number1 is an integer!
} else {
// $number1 is NOT an integer (or is empty)!
}

如果您想允许在整数中使用可选的前导号(+/-(,请将regexp更改为:

'/^[+-]?d+$/'

一旦您确定$number是否类似整数,您可能需要将其转换为实际整数(取决于您打算如何使用它(:

$number1 = (int) $number1;

最新更新