Php 如何确保用户提交的数字输入符合特定格式
我在PHP中工作,我想检查给定用户提交的数字输入是否太大或太小Php 如何确保用户提交的数字输入符合特定格式,php,regex,preg-match,Php,Regex,Preg Match,我在PHP中工作,我想检查给定用户提交的数字输入是否太大或太小 我在数据库中以64位整数的形式存储这些数据(将它们乘以10^8,以避免在将来的计算中出现舍入错误)。我限制了数量,使其不能超过以下精度:小数点后不超过4个数字。此外,由于用户输入的上限应为9900万,我还希望在小数点之前指定不超过8个数字。我怎样才能干净利落地做到这一点 我目前的方法似乎有点老套: 代码: 另外,我不希望输入的数据小于0.0001。我精通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
是否符合您的要求。(另请参见此) 要求:
有一个长度在1到8位之间的完整部分$input
可选地包含一个$input
,后跟1到4位数字(小数部分)李>
是大于或等于0.0001的正数$input
- 我认为下面的正则表达式符合您的需要
它将匹配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