Php 如何确保用户提交的数字输入符合特定格式

Php 如何确保用户提交的数字输入符合特定格式,php,regex,preg-match,Php,Regex,Preg Match,我在PHP中工作,我想检查给定用户提交的数字输入是否太大或太小 我在数据库中以64位整数的形式存储这些数据(将它们乘以10^8,以避免在将来的计算中出现舍入错误)。我限制了数量,使其不能超过以下精度:小数点后不超过4个数字。此外,由于用户输入的上限应为9900万,我还希望在小数点之前指定不超过8个数字。我怎样才能干净利落地做到这一点 我目前的方法似乎有点老套: 代码: 另外,我不希望输入的数据小于0.0001。我精通php的网页设计不熟悉php的数学功能有没有一个简单的方法来处理这个问题

我在PHP中工作,我想检查给定用户提交的数字输入是否太大或太小

  • 我在数据库中以64位整数的形式存储这些数据(将它们乘以10^8,以避免在将来的计算中出现舍入错误)。我限制了数量,使其不能超过以下精度:小数点后不超过4个数字。此外,由于用户输入的上限应为9900万,我还希望在小数点之前指定不超过8个数字。我怎样才能干净利落地做到这一点
我目前的方法似乎有点老套:

代码:

  • 另外,我不希望输入的数据小于0.0001。我精通php的网页设计不熟悉php的数学功能有没有一个简单的方法来处理这个问题

感谢您提供的任何提示

您可以使用正则表达式和
mb_ereg_匹配(regex,string)
函数

看看这是否有效:

$number = '123.4567';
if(preg_match('/^\s*\d*\.?\d{4}\s*$/', $number)) echo "Match";
else echo "Not match";

使用下面的代码,您可以检查
$input
是否符合您的要求。
(另请参见此

要求:

  • $input
    有一个长度在1到8位之间的完整部分
  • $input
    可选地包含一个
    ,后跟1到4位数字(小数部分)
  • $input
    是大于或等于0.0001的正数

    • 我认为下面的正则表达式符合您的需要

      它将匹配9999999.9999和00000000.0000之间的所有数字,包括小数点和空字符串

      分形部分包含的数字不超过4位

      if (preg_match('~^[0..9]{0,8}(?:\.[0..9]{1,4})?$~'), $number) {
        $match = TRUE;
      } else{
        $match = FALSE;
      }
      
      您可以尝试以下方法:

      if (preg_match('~^(?>[1-9]\d{0,7}+|0)(?>\.\d{0,3}+[1,9])?$~', trim($number), $result))
          // true
      else
          // false
      
      这种模式避免了像
      00015
      1.000
      这样的事情,但如果您想允许这样做,只需将
      [1-9]
      替换为
      \d
      ,或者更好地使用
      ~^\d{1,8}+(?>\.\d{1,4}+)$~


      之后必须使用$result,其中包含经过修剪和验证的编号

      听起来您在寻找
      preg\u match
      函数和正则表达式。$price?你不是说$number吗?这并没有真正考虑OP的所有要求。请修改:)注意,它也将匹配一个空字符串。语句
      它将匹配9999999.9999和00000000之间的所有数字。0000
      有点不准确:您可能想添加类似
      的内容,但不超过4个小数位数(
      :)我的正则表达式的最后一部分是进行小数位数匹配
      (?:\.[0..9]{1,4})?
      我知道您的正则表达式会这样做。您的描述不准确:您声明
      它将匹配9999999.9999和00000000.0000之间的所有数字(包括0.0000001)。您应该将描述更改为类似
      的内容,它将匹配9999999.9999和00000000.0000之间的所有数字,且不超过4个小数位数
      (以便更准确地描述正则表达式(正确)的功能)。好的,我现在理解了它,并相应地更正了它。谢谢@Expert System
      
      if (preg_match('~^[0..9]{0,8}(?:\.[0..9]{1,4})?$~'), $number) {
        $match = TRUE;
      } else{
        $match = FALSE;
      }
      
      if (preg_match('~^(?>[1-9]\d{0,7}+|0)(?>\.\d{0,3}+[1,9])?$~', trim($number), $result))
          // true
      else
          // false