我在PHP工作,我想检查给定用户提交的数字输入是不是太大或太小。
我目前的方法似乎有些黑客攻击:
代码:
//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 :(得分: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
此模式可以避免00015
或1.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";