我正在寻找一种检查文本字段的方法,以确保只存在数字和小数。文本字段将通过$ _POST [“”]方法提交。
我想确保只提交这些值。
10
20.4
19.99
0.75
我想确保未提交这些值。
10 dollars
20 and .40
Ten Dollars
$10,000.15
我很困惑,我应该用哪些来检查变量值
ctype_digit
is_int
is_numeric
有人可以指出我正确的方向吗?谢谢!
答案 0 :(得分:1)
if(isset($_POST['field']) && is_numeric($_POST['field']) && $_POST['field'] > 0) { }
让我们打破这一点。
确保$_POST['field']
确实存在:
isset($_POST['field'])
存在?好。是numeric吗?
is_numeric($_POST['field'])
是?太棒了。现在它是数字,确保人们输入正值(如果这是你想要的)
$_POST['field'] > 0
(当然,>=
,由你决定)
让我们再添加一个步骤,以确保如果它遵循这些规则,它也只是两位小数或更少。
if(strpos($_POST['field'], '.') !== false) {
$decimals = explode('.', $_POST['field']);
if(strlen($decimals[1]) <= 2) {
//proceed
} else {
//should error
} else {
//proceed
}
答案 1 :(得分:0)
在这里你必须使用is_numeric
因为is_int
和ctype_digit
不检查浮点数,只检查整数。
正如评论中指出的那样。 is_numeric
也接受科学记数法,二进制,八进制和十六进制。
要将其缩小为浮点数,整数和科学记数法,您应该使用is_float
,但仍然有科学记数法,那么您可以使用strpos
添加一个简单的检查。
最终代码如下所示:
def is_simple_float(x):
return is_float(x) && strpos(x, 'e') === false
===
表示您查找值和变量的类型(以确保如果'e'
位于0,则不会返回true)。
答案 2 :(得分:0)
我可能会使用RegEx ...
<?php
function clean_decimal($string){
$string = !empty($string) ? $string : "10 dollars";
$string = preg_replace("/[^0-9.]/i","",$string);
return number_format(doubleval($string),2,".",",");;
}