【问题标题】:Zend Framework 2: Digits vs Int validatorZend 框架 2:数字与整数验证器
【发布时间】:2015-08-03 15:39:12
【问题描述】:

什么时候(在什么情况下)我们应该使用 Digits 验证器,什么时候应该使用 Int (IsInt) 验证器?

根据http://framework.zend.com/manual/current/en/modules/zend.i18n.validators.html#zend-i18n-validator-int,在某些情况下(取决于区域设置)1,243 或 1.6546 等值可能会通过验证(请查看上面链接中的第三个示例)。

$validator = new Zend\I18n\Validator\IsInt();

$validator->isValid(1234);   // returns true
$validator->isValid(1234.5); // returns false
$validator->isValid('1,234'); // returns true <-------

如果我们不再次检查这些数据,在某些情况下可能会导致混乱。

我看到 github 上的许多项目/模块使用 Int 验证器来验证诸如 id、电话或任何其他数字数据之类的数据。
使用 Digits 验证器而不是 Int 不应该更安全吗?

Digits 和 Int 验证器有哪些优缺点?

【问题讨论】:

    标签: php validation zend-framework zend-framework2


    【解决方案1】:

    Zend\I18n\Validator\IsInt 是一个验证器,它使用NumberFormatter(link) 来验证假设区域设置的数字。例如,数字 12345.67 在美国是“12,345.67”,在法国是“12 345,67”,在德国是“12.345,67”。

    Zend\Validator\Digits 是一个原语。创建它只是为了验证 PHP 的 type-casting 问题。

    答案是:

    • 使用Zend\I18n\Validator\IsInt,以防您使用语言环境。
    • 使用Zend\Validator\Digits 来验证字符串中是否只有数字(这意味着任何其他符号,如千位分隔符或逗号都不会通过此验证器)并且区域设置对您来说并不重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      相关资源
      最近更新 更多