如何确保用户提交的数字输入遵循特定格式

时间:2013-05-12 19:56:49

标签: php regex preg-match

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

  • 我将数据库中的金额存储为64位整数(乘以10 ^ 8以避免在将来的计算中出现舍入错误)。我限制金额,使它们不能超过以下精度:小数点后不超过4个数字。此外,由于用户输入的上限应为9900万,我还想在小数点前指定不超过8个数字。我怎样才能做到这一点呢?

我目前的方法似乎有些黑客攻击:

代码:

//Check for existence of decimal point in string using strpos

//explode the string by the decimal point

//do a strlen on both the strings and check they dont exceed 8 and 4 respectively

//if no decimal point, simply do a strelen and check it's not greater than 8
  • 另外,我不希望输入的数据小于0.0001。我精通php的网页设计不熟悉php的数学函数是否有一个简单的方法来处理这个?

感谢您提供任何提示

5 个答案:

答案 0 :(得分:1)

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

$input = ...;
$pattern = "~^\s*\d{1,8}(?:\.\d{1,4})?\s*$~";
if (($input > 0) && preg_match($pattern, $input)) {
    /* $input is OK */
} else {
    /* $input is NOT OK */
}

要求:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我认为以下正则表达式符合您的需求。

它将匹配99999999.9999和00000000.0000之间的所有数字,包含和不包含小数点以及空字符串。

分形部分包含不超过4位

if (preg_match('~^[0..9]{0,8}(?:\.[0..9]{1,4})?$~'), $number) {
  $match = TRUE;
} else{
  $match = FALSE;
}

答案 3 :(得分:0)

你可以试试这个:

if (preg_match('~^(?>[1-9]\d{0,7}+|0)(?>\.\d{0,3}+[1,9])?$~', trim($number), $result))
    // true
else
    // false

此模式可以避免000151.000之类的内容,但如果您想允许这样做,只需将[1-9]替换为\d或更好地使用~^\d{1,8}+(?>\.\d{1,4}+)?$~代替

您必须使用包含经过验证的已验证号码的$ result。

答案 4 :(得分:-1)

看看是否有效:

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