Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 绕过错误,只显示输入的数字格式参数文本_Php - Fatal编程技术网

Php 绕过错误,只显示输入的数字格式参数文本

Php 绕过错误,只显示输入的数字格式参数文本,php,Php,我知道这需要一个数字作为第一个参数。 我有一个表单,其中有许多输入文本字段,需要数字作为答案,并输出使用数字格式格式化的数字。 但是如果用户输入文本,输出就会抛出一个错误。 警告:number\u format()要求参数1为浮点,即第519行/path/to/file/script.php中给出的字符串 如果用户输入了文本,有没有办法绕过此错误,只显示文本?您可以使用下面的用户定义功能 function foo($val) { if (is_numeric($val)) {

我知道这需要一个数字作为第一个参数。

我有一个表单,其中有许多输入文本字段,需要数字作为答案,并输出使用数字格式格式化的数字。

但是如果用户输入文本,输出就会抛出一个错误。
警告:number\u format()要求参数1为浮点,即第519行/path/to/file/script.php中给出的字符串

如果用户输入了文本,有没有办法绕过此错误,只显示文本?

您可以使用下面的用户定义功能

function foo($val)
{
    if (is_numeric($val)) 
    { 
       echo number_format($val);
    } 
   else 
   { 
     echo $val; 
   }
}

并在需要时调用此函数

您可以使用下面的用户定义函数

function foo($val)
{
    if (is_numeric($val)) 
    { 
       echo number_format($val);
    } 
   else 
   { 
     echo $val; 
   }
}

并在需要时调用此函数

您可以使用HTML5输入类型number来限制仅输入数字:

输入type=“number”name=“textname”


这只适用于HTML5投诉浏览器。确保html文档的doctype为:!DOCTYPE html

您可以使用HTML5输入类型number来仅限制数字条目:

输入type=“number”name=“textname”

这只适用于HTML5投诉浏览器。确保html文档的doctype为:!DOCTYPE html

PHP有一个类,当您想要将错误转换为异常时,可以使用该类。同一页显示了如何:

function exception_error_handler($severity, $message, $file, $line) {
    if (!(error_reporting() & $severity)) {
        // This error code is not included in error_reporting
        return;
    }
    throw new ErrorException($message, 0, $severity, $file, $line);
}
set_error_handler("exception_error_handler");

try {
   // Normal code that raises errors 
} catch (ErrorException $e) {
    //Handle it
}

restore_error_handler();
您案例的具体替代方案:

function numberFormatOrDefault($number , $decimals = 0 , $dec_point = "." ,  $thousands_sep = ",") {
    if (is_numeric($number)) {
        return number_format($number, $decimals, $dec_point, $thousands_sep); 
    } else {
        return $number;
    }
}

$str1 = "123.2";
$str2 = "not a number";
echo numberFormatOrDefault($str1,4); //123.2000
echo numberFormatOrDefault($str2);   //not a number
然后,您可以用
numberFormatOrDefault
调用替换
number\u格式的调用(只需简单的查找和替换即可)

我更喜欢第二种方法,因为它修复了特定的问题,而不是捕获可能发生的每个PHP错误,因为它不是解决此问题的理想方法

PHP有一个类,用于将错误转换为异常。同一页显示了如何:

function exception_error_handler($severity, $message, $file, $line) {
    if (!(error_reporting() & $severity)) {
        // This error code is not included in error_reporting
        return;
    }
    throw new ErrorException($message, 0, $severity, $file, $line);
}
set_error_handler("exception_error_handler");

try {
   // Normal code that raises errors 
} catch (ErrorException $e) {
    //Handle it
}

restore_error_handler();
您案例的具体替代方案:

function numberFormatOrDefault($number , $decimals = 0 , $dec_point = "." ,  $thousands_sep = ",") {
    if (is_numeric($number)) {
        return number_format($number, $decimals, $dec_point, $thousands_sep); 
    } else {
        return $number;
    }
}

$str1 = "123.2";
$str2 = "not a number";
echo numberFormatOrDefault($str1,4); //123.2000
echo numberFormatOrDefault($str2);   //not a number
然后,您可以用
numberFormatOrDefault
调用替换
number\u格式的调用(只需简单的查找和替换即可)


我更喜欢第二种方法,因为它修复了特定的问题,而不是捕获可能发生的每个PHP错误,因为它不是解决此问题的理想方法

为什么不进行打字检查呢
if(is_numeric($input)){echo number_format($input)}else{echo$input}
大约有35行这样的代码。这不能用一次尝试捕获吗?为什么不只是类型检查呢
if(is_numeric($input)){echo number_format($input)}else{echo$input}
大约有35行这样的代码。这不能用一个try-catch捕获吗?你也可以在html5中使用pattern属性:你也可以在html5中使用pattern属性: