验证没有符号的数字(科学)
Posted
技术标签:
【中文标题】验证没有符号的数字(科学)【英文标题】:validate number without notation (scientific) 【发布时间】:2014-07-14 06:55:55 【问题描述】:我在验证数字时遇到了一个真正的问题。
如果我的表单有一个货币值字段 (1.99),我可以使用 floatval 验证输入并保存在我的数据库中。
但如果该值是科学计数法 (1E7),则操作将返回 true,并且我的数据库中的保存会出现问题。
我正在努力解决这个问题,我该如何解决这个问题? 在此先感谢
示例:
floatval( '17E20' ) // float(1.7E+21)
floatval( '0xFF' ) // float(0)
floatval( '7E-10' ) // float(7.0E-10)
floatval( '1.23X' ) // float(1.23)
【问题讨论】:
floatval
不是验证函数。您可以为此使用正则表达式。
我知道,函数是_float
不,is_float
不是用户输入验证功能。它只是检查变量的类型。 :^ ) 你有什么反对正则表达式的吗?
我不能很好地处理数字类型,所以不知道这种情况的最佳规则是什么。你能帮忙吗? :)
【参考方案1】:
来自浏览器的用户输入是字符串。我们需要将字符串验证为在.
或,
之后有2 位数字的简单小数符号。
$value = '122.33';
$result = preg_match('/^\d+([\.,]\d1,2)?$/', $value);
// ^ one or two digit
// ^ dot or comma
// ^ at least one digit
【讨论】:
'is_numeric' 函数在接受科学记数法方面非常灵活。没有检查数字 0-9 货币和整数的本机功能吗?我计划将您的 RE 与其他规则一起使用,并创建一个函数TypeInput
,例如验证以返回 int、float、string ... 认为是个好主意吗?感谢回复
@PapaCharlie,是的,抽象是正确的方向。
我将使用ER来检查类型以方便工作。感谢您的帮助
如果我正确地创建了一个函数来返回输入类型,我可以执行以下操作:if(typeof($input, 'float')) (float)$input
,所以我正在更改string to float
而不会冒科学记数法运算指数的风险。我说的对吗?
@PapaCharlie ,使用浮点字段处理金钱是有风险的。以上是关于验证没有符号的数字(科学)的主要内容,如果未能解决你的问题,请参考以下文章
php验证密码 必须为6-16位字母数字符号组合, 正则表达式 着急,在线等
JAVA正则验证[密码]。验证规则:[5-20位字符,英文,数字或各种符号,不能存在单一形式]。 答案如下: