验证没有符号的数字(科学)

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位字符,英文,数字或各种符号,不能存在单一形式]。 答案如下:

JavaScript正则验证密码强弱度

jQuery 密码验证 字母加数字或符号的组合密码,不能单独使用数字字母或字符及 常用正则

在 Java 中验证 IPv4 地址

用于验证科学记数法的 RegEx