如何从表单中获取 int 而不是 string?

发布于 2024-10-18 08:10:26 字数 500 浏览 6 评论 0原文

从表单获取变量:

<form method = 'POST' action = ''>
        <input type = 'text' name = 'a' size = '1' >
        <input type = 'submit' value = 'Find it'>
</form>"

如果我输入 1 并使用 gettype($POST_['a']) 它返回字符串,是否可以输入 int?因为在此之后我想检查该变量是否为 int。

更新

得到的答案是它总是返回字符串,他们建议我使用 (int) 或 intval(),但是如果它真的是像 'a' 这样的字符串,它会返回 0,但它也可能是整数值0,如何解决这个问题?

更新

编辑拼写错误后 Brad Christie 建议最好的方法,使用 is_numeric

Getting variable from form:

<form method = 'POST' action = ''>
        <input type = 'text' name = 'a' size = '1' >
        <input type = 'submit' value = 'Find it'>
</form>"

If I enter 1 and use gettype($POST_['a']) it returns me string, is it possible to enter int? because after this I want check if that variable is int.

UPDATE

Got answers that it returns always string and they offered me to use (int) or intval(), but then if it's really string like 'a' it returns 0, but it may be also integer value 0, how to overcome this problem?

UPDATE

After editing typo Brad Christie suggested best way, using is_numeric

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

谁与争疯 2024-10-25 08:10:26
// convert the $_POST['a'] to integer if it's valid, or default to 0
$int = (is_numeric($_POST['a']) ? (int)$_POST['a'] : 0);

您可以使用 is_numeric 来检查,并且 php 允许强制转换为 整数类型也是如此。

实际比较可以执行is_int

更新

版本5.2有filter_input,可能会多一点对于这种数据类型(和其他数据类型)来说是稳健的:

$int = filter_input(INPUT_POST, 'a', FILTER_VALIDATE_INT);

我选择了FILTER_VALIDATE_INT,但还有FILTER_SANITIZE_NUMBER_INT更多——这取决于您想要做什么。

// convert the $_POST['a'] to integer if it's valid, or default to 0
$int = (is_numeric($_POST['a']) ? (int)$_POST['a'] : 0);

You can use is_numeric to check, and php allows casting to integer type, too.

For actual comparisons, you can perform is_int.

Update

Version 5.2 has filter_input which may be a bit more robust for this data type (and others):

$int = filter_input(INPUT_POST, 'a', FILTER_VALIDATE_INT);

I chose FILTER_VALIDATE_INT, but there is also FILTER_SANITIZE_NUMBER_INT and a lot more--it just depends what you want to do.

青瓷清茶倾城歌 2024-10-25 08:10:26

通过 HTTP 通过网络发送,一切都是一个字符串。由您的服务器决定“1”应该是1

Sending over the wire via HTTP, everything is a string. It's up to your server to decide that "1" should be 1.

似狗非友 2024-10-25 08:10:26

不可以。HTTP 只处理文本(或二进制文件)。

你必须转换它。

No. HTTP only deals with text (or binaries).

You have to convert it.

独行侠 2024-10-25 08:10:26

我会使用 (int)$_POST['a'] 将其转换为整数。

I'd use (int)$_POST['a'] to convert it to an integer.

好听的两个字的网名 2024-10-25 08:10:26

如果您更喜欢保持广泛的类型兼容性并保留除 int 之外的输入类型(double、float、ecc。),我建议如下:

$var = is_numeric($_POST['a'])?$_POST['a']*1:$_POST['a'];

您将得到:

$_POST['a'] = "abc"; // string(3) "abc"
$_POST['a'] = "10"; // int(10)
$_POST['a'] = "10.12"; // float(10.12)

if you prefer mantain a wide type compatibility and preserve input types other than int (double, float, ecc.) i suggest something like this:

$var = is_numeric($_POST['a'])?$_POST['a']*1:$_POST['a'];

You will get:

$_POST['a'] = "abc"; // string(3) "abc"
$_POST['a'] = "10"; // int(10)
$_POST['a'] = "10.12"; // float(10.12)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文