Zend Framework 2:Digits vs Int验证器

时间:2015-08-03 15:39:12

标签: php validation zend-framework zend-framework2

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

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

$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,phone或任何其他数字数据等数据。
使用Digits验证器而不是Int?

是不是更安全和安全

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

1 个答案:

答案 0 :(得分:2)

Zend\I18n\Validator\IsInt是一个验证程序,它使用NumberFormatterlink)来验证假定语言环境的数字。例如,美国的数字12345.67为“12,345.67”,法国为“12 345,67”,德国为“12.345,67”。

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

答案是:

  • 如果您正在使用区域设置,请使用Zend\I18n\Validator\IsInt
  • 如果您想验证字符串中是否只有数字(这意味着任何其他符号,如千位分隔符或逗号都不会通过此验证程序),请使用Zend\Validator\Digits并且区域设置对于你。