【问题标题】:I want my form input as an integer... but only if it was submitted as such我希望我的表单输入为整数......但前提是它是这样提交的
【发布时间】:2011-03-11 20:19:41
【问题描述】:

因为它出现 intval 仅在它不是整数时才返回 0(我有时在输入中想要 0),而且由于 is_int 不评估字符串输入来告诉我它是否是整数(如果它不是整数,我根本不熟悉将变量转换为(int) 的作用)。

解决这个问题的正确方法是什么?

【问题讨论】:

标签: php string casting integer


【解决方案1】:

您可能想看看ctype_digit() 函数(引用)

bool ctype_digit ( string $text )
如果每个字符都返回TRUE 在字符串$text 中是一个小数 数字,FALSE 否则。

使用它来测试输入是由什么组成的,然后您应该能够决定如何处理它,具体取决于它是否包含整数。


我想这样的事情应该可以解决问题:

if (ctype_digit($_POST['your_field'])) {
    // it's an integer => use it
} else {
    // Not an integer
}

【讨论】:

  • 我没有选票了,所以有文字+1。每个人总是忘记可怜的老 ctype。
  • 是的,它似乎不太知名:几天前我在工作的同事那里也有同样的问题^^
  • 猜猜这可行,但我使用的是上一个问题中的if((string)(int)$var == $var)
【解决方案2】:

也许试试is_numeric。根据文档中的示例,这正是您想要的。

【讨论】:

  • 虽然is_numeric 适用于字符串,但对于转换为浮点数的内容,它也会返回true。
【解决方案3】:

您可以将 is_int 与 is_string 结合使用吗?

例如:

if(is_int(x) == 0 && is_string(x))

【讨论】:

  • 没有。一个变量不能同时是 string 类型和 int 类型。如果x 是字符串,则您引用的表达式为真,否则为假-根本不是OP 要求的。
【解决方案4】:

答案与 matt 相同,但更容易阅读:

preg_match('/^\d+$/', $x)

但如果您的系统有ctype,它可能会更快。

【讨论】:

    【解决方案5】:
    $input =  preg_match("/^[0-9]{1,}$/",$input) ? (int)$input:$input;
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    相关资源
    最近更新 更多